现代操作系统引论
操作系统的两大主要作用是什么?
- 管理硬件为用户提供一个简单的计算机模型
由于用户直接和硬件打交道是一件很困难的事,所以就由操作系统为用户提供一个资源集的清晰抽象,而用户通过操作系统管理硬件资源。
- 资源管理与分配
在程序之间有序对处理器、存储器、以及一些IO接口设备…进行分配;记录程序使用资源的信息,对资源进行分配;其中资源管理包括(1)时间复用 (2)空间复用。
列举常用的 9 种操作系统应用
- 大型机操作系统 ==》与个人计算机主要差别是IO处理能力强大,主要提供的服务:批处理、事物处理、分时;(1)批处理应用:保险公司索赔、连锁商店的销售报告;(2)事物处理应用:银行支票处理,航班预定;(3)分时应用:在大型数据库查询;
- 服务器操作系统 ==》在服务器上(个人PC、工作站、大型机)运行,通过网络为多用户服务,用户可以共享资源;应用:可以提供打印服务、文件服务、Web服务处理请求;
- 多处理器操作系统 ==》将多个CPU连接成单个系统;应用:个人计算机、以及笔记本电脑大都是多核芯片
- 个人计算机操作系统 ==》为单个用户提供良好的支持;应用:游戏、字处理软件、Internet 访问…等
- 掌上计算机操作系统 ==》手机、平板
- 嵌入式操作系统 ==》在控制设备的计算机中运行,不能安装软件;应用:微波炉、电视机、MP3;主要的嵌入式操作系统又linux、QNX;
- 传感器节点操作系统 ==》有许多用途需要配置微小传感器节点网络,节点就是微型计算机;应用:森林火灾探测、气象预测、建筑物保护等
- 实时操作系统 ==》将时间作为关键参数,分为硬实时系统和软实时系统;某个动作必须在规定的时间内完成,比如民用航空、军事之类的必须提供严格的保证就是硬实时系统,软实时系统相对来说不是很严格,就像超过时间期限也不会有太大影响;
- 智能卡操作系统 ==》最小的操作系统,包含一块CPU芯片的信用卡;应用:电子支付…等
分时系统和多道程序系统的区别?
- 多道程序系统则是不同 程序 间的穿插运行
- 分时操作系统是给不同 用户 提供程序的使用
多道程序系统:在计算机内存中运行多个相互独立的程序; 特点是:多道、宏观上并行、微观上串行。从宏观上看是并行的,多道程序都处于运行中,并且都没有运行结束;从微观上看是串行的,各道程序轮流使用CPU,交替执行。目的是为了提高CPU的利用率,充分发挥计算机系统部件的并行性
分时操作系统:一台计算机同时为多个用户提供资源(系统处理机时间与内存空间)按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。特点是:可有效增加资源的使用率
主存与高速缓存
为了使用高速缓存,主存被划分为若干cache行,通常每行长32或64字节。每次缓存一整个cache行,每次缓存一整行而不是一个字节或一个字,这样的优点是什么?
存储器访问表现出引用局部原则,即如果读取某一个位置,则接下来访问这个位置的概率非常高,增加缓存命中的概率;读取速度快
CPU 、DMA 、多道程序
每个字节的读取直接由 CPU 处理而没有 DMA ,这对于多道程序来说这种组织方式有啥意义?
DMA (Direct Memory Access,直接内存存取) 它允许不同速度的硬件装置来沟通 而不需要依赖于 CPU 的大量中断负载。在多道程序的情况下 CPU 处理读取会占用 CPU 大量的时间造成效率的降低;
由于CPU 访问内存/读取 得到指令数据的时间要大于执行指令的时间,所以把一些关键变量或临时数据保存在寄存器上;这样在指令集中提供一些指令可以把一个字节从内存调入寄存器,也可以把它由寄存器调到内存;如果没有 DMA ,则 CPU 需要把每一片段的资料复制到寄存器,然后把它们再次写回到新的地方,在这个时间中,CPU 对于其他的工作来说就无法使用;
内核态 vs 用户态
(很重要)
https://www.cnblogs.com/likui360/p/6224633.html
https://blog.csdn.net/qq_39823627/article/details/78736650
陷阱指令
当一个程序出错的时候,比方说:执行非法指令,使用无效地址,这些陷阱会转换成信号,是使操作系统发送给进程一个指令,这个指令会引起进程挂起,系统将其寄存器的值保存到堆栈;也就是发送陷阱指令去处理错误。
进程表
进程被挂起后,进程表保存着进程的所有信息,在随后的某个时刻里,进程再次启动的状态必须与先前暂停的状态完全相同;一个进程有关的信息除了进程自身的地址空间内容以外,其它均放在进程表中;在单一进程的系统中是不需要进程表,因为单一进程从不挂起。
调用 fork exec unlink 失败的条件?
如果进程表中没有内存空间 或者达到进程数的上限 调用fork 将失败;.对于exec 失败的的原因是 :如果找不到文件或路径,此时errno被设置为ENOENT;数组argv和envp 忘记用NULL结束 ,此时errno被设置为EFAULT;要执行的文件没有运行权限 此时errno被设置为EACCES。如果将要解除链接的文件不存在,或者调用unlink 的进程没有权限,则unlink将失败。