操作系统,揭开钢琴的盖子-1
C++软件与嵌入式软件面经解析大全(蒋豆芽的秋招打怪之旅)
本章讲解点
- 1.1 操作系统的来历
- 1.2 操作系统的功能
- 1.3 操作系统的硬件知识
- 1.4 linux下编译程序
- 1.5 Makefile
- 1.6 linux的常用指令
- 1.7 进程的概念
- 1.8 进程的状态转换
- 1.9 进程的创建
- 1.10 守护进程
- 1.11 僵尸进程与孤儿进程
- 1.12 wait()或waitpid()系统调用
- 1.13 进程通信——管道
- 1.14 进程通信——系统IPC
- 1.15 进程通信——socket套接字
- 1.16 线程
- 1.17 线程的创建
- 1.18 线程通信——互斥锁
- 1.19 线程通信——信号量
- 1.20 线程通信——条件变量
- 1.21 线程通信——读写锁
- 1.22 线程池
- 1.23 协程
- 1.24 虚拟内存
- 1.25 页表
- 1.26 缺页中断
- 1.27 缺页置换算法
- 1.28 锁
- 1.29 操作系统资源调度方法
- 1.30 IO模型类型
受众:本教程适合于C/C++已经入门的学生或人士,有一定的编程基础。
本教程适合于互联网、嵌入式软件求职的学生或人士。
故事背景
蒋 豆 芽:小名豆芽,芳龄十八,蜀中人氏。卑微小硕一枚,科研领域苟延残喘,研究的是如何炒好一盘豆芽。与大多数人一样,学习道路永无止境,间歇性踌躇满志,持续性混吃等死。会点编程,对了,是面对对象的那种。不知不觉研二到找工作的时候了,同时还在忙论文,豆芽都秃了,不过豆芽也没头发啊。
隔壁老李:大名老李,蒋豆芽的好朋友,技术高手,代码女神。给了蒋豆芽不少的人生指导意见。
导 师:蒋豆芽的老板,研究的课题是每天对豆芽嘘寒问暖。
故事引入
导 师:疫情在家,一定不要到处跑,注意安全知道吗?待在家里就好好写论文。
蒋 豆 芽:好的!(豆芽心里小感动,老师真的很关心我们的好吗)
蒋 豆 芽:(焦急)老李,我最近电脑坏了呀!可怎么办?完了!我论文一大堆东西都在里面!
隔壁老李:(疑惑)豆芽,你作为一个程序员,难道不会修电脑吗?
蒋 豆 芽:(理不直,气也壮)嗯?老李,你怎么能这么说呢?控制工程专业的学生也修不了洗衣机,电气工程专业的他也没法接电线啊!
隔壁老李:(叹气)豆芽,难怪你没有女朋友啊,都不会修电脑的。
蒋 豆 芽:我委屈啊!
隔壁老李:其实修电脑没那么难的,我来帮你看看。
十分钟后。。。。。。
蒋 豆 芽:(惊讶)老李,你也太厉害了吧,太好了,我的论文都在!
隔壁老李:其实不难,只不过涉及一些操作系统的知识。
蒋 豆 芽:我的天,老李,快教教我,学会了,我也去帮妹子修电脑!
隔壁老李:(敲脑袋)我可不是教你怎么修电脑。既然说到操作系统了,看样子我们又可以学习新知识了。无论是嵌入式还是互联网,凡是涉及软件开发的,了解一定的操作系统知识是大有好处的。
蒋 豆 芽:太好了!之前学完C语言、C++,接下来开始学习操作系统方面的基础知识,(摊手)不过老李,我可没那么多时间,我还要找工作呢!
隔壁老李:放心,我们讲的就是面试常问的知识点,我会慢慢给你展开讲清楚的。
蒋 豆 芽:(激动)开始冲!
1.1 操作系统的来历
隔壁老李:(咳咳)计算的操作系统(Operating System)对于计算机可以说是十分重要的,从使用者角度来说,操作系统可以对计算机系统的各项资源板块开展调度工作,其中包括软硬件设备、数据信息等。运用计算机操作系统可以减少人工资源分配的工作强度,使用者对于计算的操作干预程度减少,计算机的智能化工作效率就可以得到很大的提升。
最初的电脑没有操作系统,人们通过各种按钮来控制计算机,后来出现了汇编语言,操作人员通过有孔的纸带将程序输入电脑进行编译。这些将语言内置的电脑只能由制作人员自己编写程序来运行,不利于程序、设备的共用。
为了解决这种问题,就出现了操作系统,这样就很好实现了软件的运行,以及对计算机硬件资源的管理。总而言之,操作系统不仅是为了计算机更好的管理资源和提升资源利用率,同时也是为了更好的人机交互,要是没有操作系统,电脑上没有办法运行任何软件,于是我们就只能在CPU上烤肉了。
蒋 豆 芽:(笑容邪魅)哈哈。是的,操作系统是用户程序与计算机硬件的桥梁。而我们电脑端使用的最多的就是Windows和Linux这两个操作系统,而手机端使用的最多的就是Android和IOS这两个操作系统,方便人机交互,那操作系统有哪些功能呢?
1.2 操作系统的功能
隔壁老李:操作系统主要包括以下几个方面的功能 :
(1)CPU管理:其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一个任务所独占,进程管理的工作十分简单。但在多道程序或多用户的情况下,组织多个作业或任务时,就要解决处理器的调度、分配和回收等问题。(关于进程的概念,我们将在本章的1.7节详细介绍,读者也可以先行学习1.7节)
(2)存储管理,分为几种功能:存储分配、存储共享、存储保护、存储扩张。
(3)设备管理,分为以下功能:设备分配、设备传输控制、设备独立性。
(4)文件管理:文件存储空间的管理、目录管理、文件操作管理、文件保护。
(5)作业管理,是负责处理用户提交的任何要求。
隔壁老李:(会心一笑)操作系统的起源和功能我们就大致讲清楚了。为了后面更好的讲解操作系统更深入的知识,我觉得有必要给你补充一些基本知识。
豆芽你是非科班出身,很多和你一样立志从事互联网或嵌入式的同学大多都是非科班,没学过相关课程,也没看过操作系统方面的书籍,缺乏基本的常识。
蒋 豆 芽:(激动)嗯嗯,这个太赞同了!老李,你真是贴心。
1.3 操作系统的硬件知识
隔壁老李:(刘海一撩)我们先讲讲计算机硬件,涉及很多概念,必须先讲清楚。
操作系统与运行该操作系统的计算机硬件联系密切,操作系统的任何操作最终都会反映到硬件上,因此有必要了解一些相关硬件知识。一台个人电脑可以抽象为一个简单的模型,如图:
CPU、存储器以及I/O设备都由一条系统总线连接起来并通过总线与其他设备通信。
隔壁老李:(1)CPU是计算机的“大脑”,它从内存中取出指令并执行。
在每个CPU基本周期中,首先从内存中取出指令,解码以确定其类型和操作数,接着执行,然后再取指令、解码并执行。重复这一个过程,直到程序被执行完成。
CPU执行代码是一个类似流水线的过程。
蒋 豆 芽:嗯?有意思,流水线何解?
隔壁老李:你知道工业流水线吗?以汽车装配为例来解释流水线的工作方式,假设装配一辆汽车需要四个步骤:
- 第一步冲压:制作车身外壳和底盘等部件。
- 第二步焊接:将冲压成形后的各部件焊接成车身。
- 第三步涂装:将车身等主要部件清洗、化学处理、打磨、喷漆和烘干。
- 第四步总装:将各部件(包括发动机和向外采购的零部件)组装成车。
汽车装配则同时对应需要冲压、焊接、涂装和总装四个工人。
最简单的方法是一辆汽车依次经过上述四个步骤装配完成之后,下一辆汽车才开始进行装配,最早期的工业制造就是采用的这种原始的方式,即同一时刻只有一辆汽车在装配。
不久之后人们发现,某个时段中一辆汽车在进行装配时,其它三个工人都处于闲置状态,显然这是对资源的极大浪费,于是思考出能有效利用资源的新方法,即在第一辆汽车经过冲压进入焊接工序的时候,立刻开始进行第二辆汽车的冲压,而不是等到第一辆汽车经过全部四个工序后才开始,这样在后续生产中就能够保证四个工人一直处于运行状态,不会造成人员的闲置。
这样的生产方式就好似流水川流不息,因此被称为流水线。你看下图是来自电影《摩登时代》里的一个片段,一个机器流水线负责传送物料,三个工人每人负责一个工序,每个人都要一直忙碌起来,这部电影讽刺了资本主义对工人的剥削。
蒋 豆 芽:(恍然大悟)哦!我明白了,所以CPU执行一条指令时,也分为几个步骤,CPU并不会等一条指令完全执行完才执行下一条指令,而是像流水一样。没想到CPU也要接受资本的压榨(摊手)。
隔壁老李:没错。经典MIPS五级流水线将执行的声明周期分为五个部分:
- 取指:指令取指(InstrucTIon Fetch)是指将指令从存储器中读取出来的过程。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> - 本专刊适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专刊适合于互联网C++软件开发、嵌入式软件求职的学生或人士。 - 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共近400道,知识点讲解全面。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。 </p> <p> <br /> </p>