仅为自学时的笔记, 如有问题请多指教
目录
操作系统的启动
DISK: 存放OS
BIOS: 基本I/O处理系统
POST(加电自检)寻找显卡, 执行BIOS
BIOS从某个特定的地址开始执行
Bootloader一般是在放在硬盘的第一个主引导扇区
BIOS将Bootloader从DIST放到内存中,Bootloader将OS加载到内存中
进程 是一个程序的执行过程。执行前需要将该程序放到内存中,才能被CPU处理
操作系统的"定位"
命令接口 (直接使用)
- 联机命令接口(交互式命令接口) 比如cmd中逐行执行的命令
- 脱机命令接口(批处理命令接口) 比如.bat脚本
程序接口 如程序调用的.dll文件,用户通过程序间接调用, 由一组系统调用(广义指令)组成(程序接口=系统调用)
有关系统调用可以参照下面
操作系统的特征
- 并发:计算机系统中存在多个同时运行的程序, 需要OS管理和调度
- 共享:"同时"访问 / 互斥共享
- 虚拟:将硬件层面抽象, CPU→进程 磁盘→文件 内存→地址空间 , 用户对于计算机产生一种独自占有的感觉
- 异步:程序的执行走走停停,速度不可预知; 但运行环境相同, OS需保证运行结果也相同
并发与共享相互共存
并发:指两个或多个事件在同一时间间隔内发生。宏观上同时发生, 微观上是交替发生的。
并行:指两个或多个事件在同一时刻同时发生。
运行机制
体系结构
内核功能划分的不同方式, 对应着不同的体系结构: 大内核与微内核
操作系统的体系结构与企业管理相似
内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令。用户态、核心态之间的切换相当于普通员工和管理层之间的工作交接
- 大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护。
- 微内核:随着企业体量越来越大,管理层只负责最核心的一些工作。优点是组织结构清晰,方便维护;缺点是效率低。
中断
- 当中断发生时,CPU立即进入核心态
- 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理
发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。
中断可以使CPU从用户态→核心态 ,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
“核心态→用户态”的切换是通过执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”
中断的分类
另一种分类方式
外中断处理过程
- 执行完每个指令之后,CPU都要检查当前是否有外部中断信号
- 如果检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSw、程序计数器Pc、各种通用寄存器)
- 根据中断信号类型转入相应的中断处理程序
- 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
系统调用
“系统调用” 是操作系统提供给应用程序(程序员/编程人员〉使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
例如:设备管理, 文件管理, 进程控制, 进程通信, 内存管理
凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用与库函数的区别
过程
注意:
- 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态
- 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
- 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令(前面我们知道核心态既可以执行特权指令也可以执行非特权指令,但这里的陷入指令无法执行)
以Linux为例,下面这类的即为系统调用号,可以告诉操作系统执行相应的处理程序
#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
#define __NR_close 3
#define __NR_stat 4
#define __NR_fstat 5
#define __NR_lstat 6
#define __NR_poll 7
感悟
凡是涉及共享资源或者直接影响其他进程的操作, 牵连到系统安全性的, 必须通过系统调用的方式,请求操作系统介入