操作系统预备知识
- 计算机结构原理
- 数据结构
- C和汇编语言
为什么要学习操作系统?
- 综合课程-结合许多不同的课程
- 程序设计语言
- 数据结构
- 算法
- 计算机体系结构
- 操作系统概念和原理,源代码
- 技能
- 操作系统的设计和实现
- 操作系统还在不停的发展、在工控等各种领域有强烈的需求!
- 操作系统很cool、很有用、有挑战性!
- 操作系统是计算机科学研究的基石之一!
- 在工业界:微软、谷歌、Facebook、苹果等都以OS为核心
- 在学术界:ACM,IEEE,USENIX,CFF等组织都在着手OS的研究
如何让我更好的学习操作系统?
这是我对自己说的话……读者大可跳过
我听到的我会忘记,我看到的我能记主,只有我做过的我才能理解!
什么是操作系统?
- 操作系统是一个控制软件
- 管理应用程序
- 为应用程序提供服务(例如:IO服务、声卡、网卡服务等等)
- 杀死应用程序
- 资源管理(合理分配计算机的各种资源)
- 管理外设、分配资源(公平分配,保证计算机效率的提供)
用户角度层面
我们看到是一个图形界面,方便程序展现给用户,方便用户的使用,例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PN3Bn1pv-1572624965787)(https://img.vim-cn.com/7c/549a5f2f33aa20bd1ee14b341e8c539c3248cd.jpg)]
内部层面
把CPU
抽象成进程
,把硬盘
抽象成文件
,把内存
抽象成地址空间
,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EkgsWiCP-1572624965788)(https://img.vim-cn.com/06/a5be02bbf7ffa9e4c55e4a1e8741a80cc906d8.png)]
操作系统架层次结构
硬件之上,应用程序之下
Linux、Windows、Android的界面属于外核(Shell),而不是内核(kernel),操作系统原理主要学习kernel,在Shell之下。我们关注的是内核中完成的各种功能,站在操作系统的内核的角度去看问题。
Kernel-操作系统内部组件,包括:
- CPU调度器
- 物理内存管理
- 虚拟内存管理
- 文件系统管理
- 中断处理与设备驱动
OS Kernel的特征
- 并发:计算机系统中同时存在多个运行的程序,需要OS管理和调度(不是同一时刻);而并行指的是一个时间点上有多个程序同时执行。要理解
并发
和并行
的区别 - 共享:“同时”访问;互斥共享(当一个进程正在使用这个资源,另一个进程必须等待,直到第一个进程释放)
- 虚拟:利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
- 异步:程序的执行不是一贯到底,而是走走停停的,向前推进的速度是不可预知的;但只要运行环境相同,OS需要保证程序运行的结果也要相同
操作系统的主要功能
处理器管理
是指对CPU的管理,是对CPU进行分配,并对他的运行进行有效控制与管理;为了提高程序利用率,很多计算机操作系统采用了多道程序技术(并发执行->进程(正在执行的程序通过进程管理协调多道程序之间的关系))使得计算机资源得到充分的利用。
存储管理
是指对内存空间的管理,程序要运行就必须由外存装入内存,存储管理的作用就是为每个程序合理分配空间,让他们互不干扰。
设备管理
是指计算机中所有输入输出设备的管理,提供驱动程序,用户不需要了解接口等细节,可以直接方便使用;另外一个任务,使外部设备尽可能与CPU并行工作,提高设备的使用效率。
文件管理
软件资源,程序和数据以文件的形式存放在外存上,需要的时候再载入内存。有效的组织存储和保护文件,使用户方便安全的访问他们。
用户接口
命令、图形、系统调用的形式。方便的使用操作系统各个功能
网络与通信管理
网络资源管理、数据通信管理、网络管理(性能、安全等等内容)
操作系统的逻辑结构和运行模型
用户态和内核态的划分
- 内核态:操作系统运行的状态,可以执行计算机的所有指令,能够使用计算机的所有资源
- 用户态:能够访问指令和资源会受到一定的限制
我们将内核态
和用户态
的区别,如下图所示:
内核态 | 用户态 |
---|---|
访问的资源多,可靠性、安全性要求高,维护管理比较复杂 | 访问资源有限,可靠性、安全性要求低,编程和维护比较简单 |
还有一张图片比较有代表性:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zyOTO0hl-1572624965793)(https://i.loli.net/2019/11/01/ZHiFpblWn2NDTYy.jpg)]
操作系统的逻辑结构
单内核结构
操作系统一方面对外提供服务,在内部还有各个功能模块,模块之间相互调用,构成了比较复杂的关系。
优点:结构紧密,模块间可以方便的进行组合,满足不同的需要,灵活性较高、效率高
缺点:对功能模块的划分不能精确的确定,模块独立性差;如果模块之间调用关系可能过于复杂,进而导致系统结构不够清晰,正确性、可靠性不能保证;系统维护比较困难
如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KFrJGcBB-1572624965795)(https://i.loli.net/2019/11/01/L2Y1M8zQVROZqGr.jpg)]
分层式结构
为了避免单内核结构模块之间比较复杂的关系,分层式结构直接将各个功能划分成模块,这些模块按照功能调用次序分成若干层,每个层次为上面的层次提供服务。
优点:按单向调用关系以层单位,组织各个模块,模块之间的依赖、调用关系清晰明了;对其中的一个分层进行修改,不会影响道其他层次;系统的调式变的容易;系统的正确性得到保证,系统中间的接口减少。
缺点:单向依赖的关系之间,在实现通信的时候,系统开销会比较大,进而影响系统效率。
如下图所示:
微内核结构
前面的两种结构所有的工作核心都在内核态
,在由内核态
转换为用户态
的时候会有时间开销,效率下降;在微内核结构里面,操作系统划分了两部分。一部分是在内核态
的微内核,它提供了最基本的功能,只完成极少数的内核态
任务;还有一部分是一种服务器进程,它们工作在用户态
,以用户服务器
的形式进行工作。
优点:对进程的请求提供了一次性的接口,不区分
内核级服务
和用户级服务
,所有服务采用消息传递机制服务
;具有较好的易修改性;可移植性比较好;对分布式操作系统提供较好支持。
如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ahKnv80z-1572624965809)(https://i.loli.net/2019/11/02/NMjGV7wWDLCRPol.jpg)]
操作系统的运行模型
独立运行的内核模型
有自己的独立操作空间和独立的运行环境,他的执行过程不和应用程序或者进程发生关联。并发程度不够高
嵌入到用户进程中执行的模型
为了提高并发能力,创建用户进程的时候,为其创建核心站,可以把操作系统的内核程序嵌入到其中去执行。
作为独立进程运行的模型
整个操作系统小部分核心功能仍然在
内核态
工作,大部分功能在用户态
工作,独立的服务器进程提供服务。微内核结构
就属于这种模型