马上要期末了,下面主要是对操作系统做一个总结来完成一下期中作业,知识点以思维导图的形式来展现
一.操作系统概论
思维导图
归纳一些问题:
1.脱机I/O和联机I/O?
脱机与联机的区别在于:程序和数据的输入输出是否是在脱离主机的情况下进行的。
脱机I/O:
输入时:所需的程序和数据在外围机的控制下,将其输入到磁带上,当CPU需要这些程序与数据时再从磁带上读入内存。
输出时:在外围机的控制下,将磁带上的结果通过相应的输出设备输出。
联机I/O:
输入与输出都是在主机的直接控制先完成的
2.在微内核OS中,为什么要采用客户/服务器模式?
C/S模式具有独特的优点:
- 数据的分布处理和存储
- 便于集中管理
- 灵活性与可扩充性
- 易于改变应用软件
3.特权指令和非特权指令
所谓特权指令,是指有特殊权限的指令,由于这类指令的权限最大,使用不当将导致整个系统崩溃,如清内存、置时钟、分配系统资源、修改虚存的段表或页表、修改用户的访问权限等。若所有的程序都能使用这些指令,则系统一天死机n次不足为奇。为保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用。因此,特权指令必须在核心态执行。实际上,CPU在核心态下可以执行指令系统的全集。为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,核心态下可以使用全部指令。在用户态下使用特权指令时。将产生中断以阻止用户使用特权指令。所以把用户程序放在用户态下运行,而操作系统中必须使用特权指令的那些部分程序在核心态下运行,保证了计算机系统的安全可靠。从用户态转换为核心态的唯一途径是中断或异常。
访管指令与访管中断
访管指令是一条可以在用户态下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将操作系统转换为核心态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向操作系统请求服务
那么为什么要在程序中引入访管指令呢?
这是因为用户程序只能在用户态下运行。若用户程序想要完成在用户态下无法完成的工作,该怎么办?解决这个问题要靠访管指令。访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断。处于用户态的用户程序使用访管指令时,系统根据访管指令的操作数执行访管中断处理程序,访管中断处理程序将按系统调用的操作数和参数转到相应的例行子程序。完成服务功能后,退出中断,返回到用户程序断点继续执行
例题:
用户程序在用户态下要使用特权指令引起的中断属于(D )。
A.硬件故障中断
B.程序中断
C.外部中断
D.访管中断
二.进程的描述与控制
思维导图:
归纳的问题:
1.进程的状态变化有哪些,如何变化?
- 新的:进程正在创建。
- 运行:指令正在执行。
- 等待:进程等待发生某个事件(如 I/O 完成或收到信号)。
- 就绪:进程等待分配处理器。
- 终止:进程已经完成执行。
2.思考,若一个单核系统中有N个进程,那么就绪的进程,运行的进程以及等待的进程最多会有几个?
因为是单核,所以操作系统最多给分配的每个时间片内运行一个进程,所以运行的进程数为1,就绪的进程可能为N-1,因为当有程序就绪就会去抢夺cpu资源,所以第一个就绪的进程回到达运行这个模块,而等待的进程数为N,可能所有的进程都还有IO请求或事件等待,所以都有可能在等待该部分。
3.桌上有一空盘,最多允许存放一只水果。爸爸可向盘中放一个苹果或放一个桔,儿子专等吃盘中的桔子,女儿专等吃苹果。试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步
采用P、V操作的同步算法如下:
semaphore SAB=1; //A、B的资源信号量,同时又是它们的互斥信号量
semaphore SC=0; //C的资源信号量(用于与A同步)
semaphore SD=0; //D的资源信号量(用于与B同步)
begin
parbegin
process A: //进程A的算法描述
{
while(true) {
取一个苹果;
wait(SAB); //测试盘子是否为空
将一苹果放入盘中;
signal(SC) //通知C盘中已有苹果(可能唤醒C)
}
}
process C:
{
while(true) {
wait(SC); //测试盘子是否有苹果
从盘中取出苹果;
signal(SAB); //通知A(或B)盘子已经空(可能唤醒A或B)
消费该苹果;
}
}
process B: //进程B的算法描述
{
while(true) {
取一个梨子;
wait(SAB); //测试盘子是否为空
将一梨子放入盘中;
signal(SD) //通知D盘中已有梨子(可能唤醒D)
}
}
process D:
{
while(true) {
wait(SD); //测试盘子是否有梨子
从盘中取出梨子;
signal(SAB); //通知A(或B)盘子已经空(可能唤醒A或B)
消费该梨子;
}
}
parend
end
主要思想还是通过共享变量来实现进程对资源的互斥访问而达到同步的机制,让每一步变得有序
3.问题描述:设公共汽车上,司机和售票员的活动分别为:
司机:启动汽车; 售票员:上下乘客;
正常行车; 关车门;
到站停车; 售票;
开车门;
上下乘客;
用P、V原语描述:在汽车不断到站,停车,行驶的过程中。两个人的同步活动
4.生产者消费者问题
5.哲学家进餐问题
6.程序并发执行为什么会产生间断性?
因为程序在并发执行过程中存在相互制约性
7.程序并发执行为何会失去封闭性和可再现性?
因为程序并发执行时,多个程序共享系统中的各种资源,资源状态需要多个程序来改变,即存在资源共享性使程序失去封闭性;而失去了封闭性导致程序失去可再现性.
8.在操作系统中为什么要引入进程概念?它会产生什么样的影响?
为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,而引入了进程概念.
影响: 使程序的并发执行得以实行.
9.试从动态性,并发性和独立性上比较进程和程序?
a. 动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;而程序只是一组有序指令的集合,是静态实体.
b. 并发性是进程的重要特征,同时也是 OS的重要特征.引入进程的目的正是为了使其程序能和其它进程的程序并发执行,而程序是不能并发执行的.
c. 独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位.而对于未建立任何进程的程序,都不能作为一个独立的单位参加运行.
10.什么是临界资源和临界区?
a. 一次仅允许一个进程使用的资源称为临界资源.
b. 在每个进程中,访问临界资源的那段程序称为临界区.
11.为什么进程在进入临界区之前,应先执行"进入区"代码,在退出临界区后又执行"退出区"代码
为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码成为“进入区”代码;在退出临界区后,必须执行“退出区”代码,用于恢复未被访问标志.
12.在生产者-消费者问题中,如果缺少了signal(full)或 signal(empty),对执行结果会有何影响?
可见,生产者可以不断地往缓冲池送消息,如果缓冲池满,就再也放不进去.而消费者始终因wait(full)操作将消费进程直接送入进程链表进行等待,无法访问缓冲池,造成无限等待.
13.在生产者-消费者问题中,如果将两个 wait 操作即 wait(full)和 wait(mutex)互换位置;或者是将signal(mutex)与signal(full)互换位置结果会如何?
a. wait(full)和wait(mutex)互换位置后,因为 mutex在这儿是全局变量,执行完wait(mutex),则 mutex赋值为 0,倘若 full 也为0,则该消费者进程就会转入进程链表进行等待,而生产者进程会因全局变量mutex为 0而进行等待,使full 始终为 0,这样就形成了死锁