操作系统运行时划分不同的模式,操作系统运行在内核模式,应用程序运行在用户模式,权限不同,有些指令也不能运行。内核与用户态之间不禁包含对内存的保护,还要指令的限制。
直接操作硬件端口的指令
in
从硬件端口读入
out
从硬件端口读出
用户态不允许运行这两个指令
由于应用程序也需要与硬件进行交互,因此就产生了系统调用。应用程序想做什么事情会就利用系统调用,然后操作系统做中转处理。
系统的引导
加载程序有一部分放在ROM里,就是BIOS。ROM里面有引导程序,引导程序接着引导有很多种方式
1.找到内核代码直接加载,适合小型操作系统,缺少灵活性,无法选择不同的操作系统
2.引导块反正一个地方,然后ROM加载这个引导块
加电——》进入BIOS——》BIOS选择引导设备(引导优先级)
硬盘引导
首先加载MBR(包含重要的引导程序和分区表(硬盘分区)),共512byte
硬盘第0扇区(512字节)的前446字节是启动代码。其余部分是主引导记录(MBR),其中有分区信息等内容
BIOS为什么能找到MBR? 因为MBR由于工业界标准,会被放在第0道第一个扇区上。把MBR读进来,读到0x7c00这个位置(也是工业标准),然后跳到(jmp)0x7c00,开始往后执行。
MBR里面会有分区表,活动的分区会有活动标记(active)这个标记的意思就是这个分区作为引导分区,找到活动分区,就会把这个分区的第一个扇区也是512byte读入到0x7c00位置,然后跳到0x7c00,开始往后执行。
随着·操作系统的发展,现在可以选择进入分区寻找(GRUB)
GRUB工作时操作系统还不存在
进程的概念
为什么会引入进程?
更加直观的表示程序的运行状态
1>进程是程序的一个执行的实例;
2>进程是正在执行的程序
3>进程是能分配处理器并由处理器执行的实体
按内核的观点来谈进程:它所担当分配系统资源(CPU时间,内存)的实体。
进程就是程序出现在计算机内存里面,并且正在运行(动态的,存在生命周期),进程是程序的一次执行过程。
一个进程包含:程序计数器,数据段,代码段,堆,栈等。
所有局部分配的变量都在栈里面
new,malloc申请的内存在堆里面
引入进程的利弊:
优点:多道程序需要,提高系统吞吐
缺点:空间(内存)与时间(切换)开销增大
进程的状态
一个进程的生命周期在不断的变化
read(就绪态)
running(运行态)
waiting(等待态或阻塞态)
read:
进程现在完全可以运行,给了CPU就能运行,当它被分配CPU就能立即运行
单CPU一次只运行一个进程。CPU不能一心二用
running
处于运行态的进程很可能把自己的CPU交出去。
原因1:
进程有很多指令还要运行,但是操作系统(优先级问题)中断这个程序的运行,把这个程序打到就绪态(read)
原因2:
这个进程主动让出CPU,它要去做一个IO操作,或者等某一事件,进程不知道现在应该干什么,等待外界的指令。操作系统会把该进程切换为等待态(waiting),操作系统吧CPU夺走,然后交给其他处于就绪状态的进程。
所有的等待都是为了醒来,当IO数据到来,进程知道该干什么了,操作系统会把它放到就绪态,并不会直接放到运行态。
进程状态切换的细节
涉及进程调度,另辟文章记录
进程控制块(PCB Process)–进程的代言人
TCB(线程Thread)
JCB(作业Jobs)
描述和控制进程的运行,是操作系统中最重要的记录型数据结构
记录了操作系统所需要的,用于描述进程当前情况以及进程控制运行的全部信息。
记录了进程的唯一标识符,说明信息,现场信息,管理信息。
原语
原语运行在核心态,由一条或几条机器指令组成
原语进行时中断会被屏蔽,一旦执行不可中断。
进程之间的关系
PCB中设置了家族关系表项,表明自己的父进程以及所有的子进程。
进程的创建
程存在的标志是进程控制块,所以,创建进程就是要创建PCB
引起创建进程事件有:
提交一个批处理作业
交互式作业登录
操作系统创建一个服务进程
存在的进程创建(孵化)新的进程
进程的创建原语
进程的撤销
程序正常结束
执行了非法指令
程序越权
高权限事件干预
发生错误
撤销步骤:
撤销进程号
将该进程拥有的资源归还给父进程或操作系统
若该进程拥有子进程,则先撤销它的子进程相关的
临界资源
并发进程可以共享系统中的各种资源,但是系统中某些资源具有一次仅允许一个进程使用的属性。这样的资源称为临界资源。
临界区
进程中访问临界资源的那段代码称为关于该临界资源的临界区。
进程的互斥
一组并发进程中的两个或多个程序段,因共享某一共有资源而使得这组并发进程不能同时进入临界区的关系称为进程的互斥。
进入临界区等待的状态时需要让出CPU。
同步机构
大多数同步机构采用一个物理实体,如锁,信号量,并提供相应的原语。
信号量
操作系统中用信号量来表征一种资源或状态,通过对信号量的改变来表征进程对资源的使用情况,判断信号量的值控制进程的状态。
初始值是一个整形变量不能初值为负
进程将要使用资源时,先把信号量减1,判断信号量是否大于或等于0,若是则进程继续执行。
若信号量减1后小于0,则该进程被阻塞后并进入该信号相对应的等待队列中,然后转进程调度。
信号量+0资源没有了
信号量大于0,资源充足
信号量小于0,资源不够用
进程释放一次资源后,信号量加1
p原语将要占用资源时改变信号量 判断结果
V原语将要释放资源时改变信号量 判断结果
谁先来谁先占着谁先操作,必须包含完整的互斥。
进程间的通信(协调互斥)
共享存储器
管道通信
管道机制必须提供以下3方面协调能力
互斥
消息缓冲队列通信机制
格式化消息,计算机网络中称为报文
1,消息缓冲区
2,PCB中有关通信的数据项(约定信息的格式)
3,信箱通信(发送进程->通过信箱->接受进程)
感觉笔记做得有点浅,只知道要这么做,但很多不知道为什么,后续慢慢补充原理知识吧,那一定会耗费很多时间,不过我好像也没别的事要干,hhh。