硬件结构
CPU指令集(X86,ARM,RISC-V)与操作系统的关系:其实就是CPU的架构不同,有的架构是ARM有的是X86,一个应用程序编译成ARM版本的指令集,那么只能在相应操作系统上运行,例如WINDOW,而Linux兼容多种指令集,也就是无论什么CPU体系的指令集都能在Linux上面跑
CPU的特权级(用户态,内核态)切换:内核态(管态),用户态(目态)。用户态到内核态的切换主要有一下三种:系统调用,异常,外围设备中断。
用户态切换到内核态的流程:1.每个线程都对应着一个TCB,TCB中有一个TSS字段,存储着线程对应的内核栈地址,也就是内核栈的栈顶指针。2.内核栈将当前进程的寄存器信息保存起来,同时保存了被暂停执行的程序的下一条指令,完成了由用户栈到内核栈的切换过程。 3.将CPU的字段改为内核态(R0),然后开始执行内核方法。4.当内核方法执行完毕后,会将CPU的字段改为用户态(R3),然后利用之前写入的信息来恢复用户方法的执行。
中断与异常的处理,轮询与中断的对比
中断产生后会通过中断控制器发送给CPU,CPU判断中断来自于哪个硬件设备,然后交给内核处理
异常:由CPU产生,同时发送给内核,要求内核处理这些异常。
轮询方式与中断方式的对比:中断的可靠性高,可扩展性高,生命周期高
第三部分 操作系统结构
1.机制与策略的辨析。机制是提供并实现确定的功能。策略是如何使用这些功能.例如一个主程序创建多个子进程并控制其运行,每个子进程实现不同功能并处理不同请求,主进程完全可以掌握哪个子进程优先调度,那么,执行调度就是一种机制,如何调度就是一种策略。
2.M.A.L.H方法,即模块化,抽象,分层,层级
操作系统管理系统复杂度
M.A.L.H 方法,即 模块化(modularity),抽象(abstraction),分层(layering)和层级(hierarchy)。
模块化:遵循分而治之原则,将复杂系统分解成通过接口进行交互的 模块,严格保障模块之间的界限。
抽象:在模块化基础上,将 接口与内部实现分离。
分层:将模块按照一定的原则进行层次的划分,约束每层内部模块间的交互方式与跨层次模块间的交互方式。通常原则是一个模块只能和同层模块以及相邻的上层或下层模块进行交互。
层级:另外一种模块的组织方式。将功能相近的模块组成一个具有清晰接口的自包含子系统,然后再将这些子系统递归地组成一个具有清晰接口的更大子系统。
3.微内核与宏内核的架构特征
宏内核::一个单一庞大的内核负责资源管理,统一系统调用层处理所有OS服务,高耦合,低可靠。
微内核:内核只负责IPC,模块化好,高可靠性,IPC称为性能关键,
四,内存管理
操作系统对内存的划分和动态分配就是内存管理的概念
内存管理的功能:内存空间的分配和回收,地址转换,内存空间的扩充,存储保护(保护各道作业在鸽子的存储空间内运行,互不干扰)
(创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序)
编译,链接,装入. 编译程序将用户源代码编译成若干目标模块,链接由链接程序将编译后的一组目标模块和所需的库函数链接在一起,形成一个完整的装入模块,装入由装入程序将装入模块装入内存运行。
程序链接的方式:静态链接:在程序运行之前,先将个目标模块及他们所需的库函数链接成一个可执行程序,从此后不再拆开。
装入时动态链接:编译后所得的一组目标模块在装入时,边装入边链接。
运行时动态链接:对某些目标模块的链接,是在程序执行中需要改目标模块时才进行的,便于修改和更新以及实现对目标模块的共享。
装入内存的方式:绝对装入:在编译时即知道程序将装入内存的具体地址,则编译程序将产生绝对地址的目标代码。而后将程序和数据装入内存。(只适合用于单道程序环境) 可重定位装入:在多道程序环境中,多个目标模块的起始地址均为0.装入内存时,通过所分配的内存起始地址加上程序的相对地址进行地址的动态变换,一次完成,又称为静态重定位(必须一次性全部装入,运行期间不能动态扩充和移动) 动态运行时装入:装入模块装入内存后并不立即进行地址转换,而是等到程序执行时才进行,需要重定位寄存器的支持(可以将程序分到不连续的存储区中,程序运行钱只需要装入部分代码,运行期间根据需要动态分配内存,便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。)
逻辑地址空间与物理地址空间
逻辑地址空间:程序编译后的每个模块都是以0开始编址,称为目标模块的逻辑地址。当链接为一个完整的可执行目标程序时,链接程序将按顺序以0开始编址,构造统一的逻辑地址空间。 物理地址空间:内存中物理单元的集合,是地址转化的最终地址,当装入程序将可执行代码装入内存中时,必须将逻辑地址转化为物理地址
内存保护:内存分配前,需要保护操作系统不受用户进程的影响
非连续分配管理方式
共享内存在物理内存空间申请一块缓冲区作为共享内存,多个进程将这一块物理内存通过自身的页表连接到自己的虚拟地址空间中,通过各自的虚拟地址对其进行访问,进而实现数据共享
写时拷贝的主要思想是在复制原来实体的时候,如果复制后的实体不需要进行改变,那么实际上没必要进行实体内容的拷贝,只需建立一个引用指向原来的实体内存,直接应用原来的实体内容即可,只有当需要对复制后的实体进行修改的时候才进行内容的拷贝。
基于写时拷贝机制,操作系统进一步地设计了内存去重功能。操作系统可以定期地在内存中扫描具有相同的内容的物理页。并且找到映射到这些物理页的虚拟页;然后只保存其中一个物理页,并且将具有相同内容的其他虚拟页都用写时拷贝的方式来映射到这个物理页。
物理内存分配与管理(内存碎片,空闲链表)
内存碎片:指的是无法被利用的内存,其直接导致内存资源利用率下降。
伙伴系统,用于分配连续的物理内存页算法
进程与线程:进程就是正在运行的程序,它会占用对应的内存区域,由CPU进行执行与计算。线程是操作系统OS能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.
进程控制相关的原语:创建原语(从创建态->就绪态)。撤销原语(阻塞态->终止态),阻塞原语与唤醒原语(成对出现)阻塞原语从就绪态到阻塞态,唤醒原语从阻塞态到就绪态
进程控制块(PCB) :进程控制块是存放进程的管理和控制信息的数据结构,称为进程控制块。它是进程管理和控制的最要的数据结构,每一个进程都有一个PCB,在创建PCB,建立PCB,伴随进程运行的全过程,知道进程撤销而撤销
PCB通常包含,进程标识符,进程当前状态,进程优先级,进程同步与通信机制=等等
5.操作系统调度(任务调度)
调度的概念以及调度指标:调度概念,当有一对任务要处理时,由于资源有限,这些任务没法同时处理,这个适合就需要确定某种规则来决定处理这些任务的顺序,这是调度所研究的问题。
六,进程间通信
同主机间的消息通讯机制:管道,流管道,有名管道。信号,消息队列,共享内存,信号量,套接字
七,同步原语
条件变量的作用用于多线程之间关于共享数据
状态变化的 通 信. 当一个动作需要另外一个动作完成时才能进行时. 也就是说:当一个线程的行为依赖于另外一个线程对共享数据状态
的改变时,这时候就可 以 使用条件变量.
文件系统主要分为两部分,一部分为元数据(metadata),另一部分为数据本身。元数据,“包含了与数据有关信息的数据”。索引节点管理着文件系统中元数据的部分。
设备管理