Linux之路总是漫漫,经常遇到些混淆概念的问题和一些容易忘记的东西
Q:当遇到不同书上一些定义的差异时该怎么办?
在读《深入理解计算机系统》一书时,它将PC中指令地址的控制序列的突变称为“异常Exception”,接着把异常分为四类:
1)中断(IO设备引起);
2)陷阱和系统调用(陷阱作用即为了给应用程序applications与内核之间提供一个接口,这个接口就是“系统调用system calls”);
3)故障;
4)终止。
后三者都是一条指令的直接结果,且是同步的。
然后在《计算机概念》一书中却是将在《深入…》一书中的“异常”解释为“中断”,然后把“中断”分为三类:
1)中断(硬件触发);
2)陷阱(用户触发);
3)系统调用(软件触发)。
今日特地询问了老师,这两者是否是同一种东西,老师回答如下:
A:每本书中分类不一样,只要理解清楚每本书中所讲的就好。不理解可以多与老师进行沟通。
Q:进程五个基本状态是什么?
A:进程五个状态为:
1)创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
2)就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行
3)执行状态:进程处于就绪状态被调度后,进程进入执行状态
4)阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
5)终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
如果进程运行时间片使用完也会进入就绪状态。
另外为用户观察需要,进程还有挂起和激活两种操作。挂起后进程处于静止状态进程不再被系统调用,对于操作是激活操作。
Q:"bus error" 是什么意思呢?它跟segfault有啥区别啊
A:bus error即总线错误,通常是你试着去寻找一个根本不存在的地址,比如你的主存是8G的,但你却去寻找12G的地址;segfault是说你要寻找的东西不在这个段里,就是我们常说的越界啦!
总结下,bus error是你找的东西不存在;segfault是你找的东西不被允许访问(因为根本不是你能管到的范围啊喂)
Q:CPU想要读取一个数据首先会把数据地址写到AddressBus中,然后经由他的专属命令通道ControlBus向其他设备发出读取信号,接着他就等着数据从DataBus过来。那到底CPU知道他读取的数据是从主存还是其他设备中获取的吗?
A:CPU是个有社交障碍的家伙,他跟所有设备打交道都是通过buses,包括经常与他合作的主存兄弟,唉,说到这也挺伤感,每时每刻都在合作,对方却不知道他是谁。就因为他的社交障碍,他只使用从DataBus中传过来的数据,至于数据来自哪里去往哪里只有数据自己知道,CPU不过问也不需要过问。
总结下,CPU不需要知道任何设备,他只需要处理从buses上发过来的数据就行,至于这段数据是从哪里来他一概不问,处理完了就扔给他的buses,也不问数据的归处。
Q:什么是上下文切换(context switch)?
A:一个上下文切换(有时也被称为进程切换或任务切换)是指CPU从一个进程切换到另一个进程。
更详细地描述是上下文切换时CPU正在进行下面几个动作:
(1)暂停并保存当前进程的状态(或称保存现场);
(2)从主存中检索下一个进程的上下文并将其恢复到CPU的寄存器中;
(3)返回到程序计数器(PC)指示的位置(即,返回到进程中断的代码行),以恢复进程。
上下文切换有时被描述为内核暂停执行CPU上的一个进程,并恢复执行先前暂停的其他进程。虽然这个措辞可以帮助澄清这个概念,但它本身可能会令人困惑,因为根据定义,进程是一个程序的执行实例。因此,暂停进程(suspending progression of a process)的措辞可能更为可取。
很多时候理解操作系统概念得联系生活实际,比如上下文切换就好比人们暂停思考问题A转而去思考问题B。
Q:请解释什么叫long-term scheduling, short-term scheduling, middle-term scheduling. IO bound process, CPU bound process.
A:Schedulers(调度器)是特殊的系统软件,用各种不同的方式解决进程调度问题。他们的主要任务是选择系统的进程并决定执行哪一个进程。
(后面的问题会涉及到程序-线程-进程之间的关系和区别)
长期调度(long-term scheduling):从进程池中选择进程并将他们载入到主存中去等待执行(一次只执行一个进程,剩余进程在就绪队列中等待正在执行的进程产生一个释放信号)
中期调度(middle-term scheduling):选择已经在就绪(ready)状态中的进程
短期调度(short-term scheduling):从准备执行的进程中选择进程,并给它分配CPU
更多关于CPU调度问题看链接: