进程的几种状态
进程调度算法
0. 短进程优先
1. 基于时间片的轮转 :根据进程进入就绪队列的顺序排成一队,然后每次
2. 多级反馈队列调度算法:在系统中设置多个就绪队列,并为每个队列设
从队首中取出一个元素获得时间片,如果在一个时间片内还没有执行完,
则把这个进程放在就绪队列队尾。
置不同的优先级,第一个队列的优先级高,第二个队列的优先级次之,
然后依次优先级减少。。优先级越高的队列时间片越短。在执行的过程中,
如果有一个进程加入就绪队列中,首先会加入到第一个队列的队尾,当
第一个队列中的进程在其队列对应的一个时间片没有运行完毕后,会把
该进程加入第二个队列。。如果还没有运行完,则加入第三个队列。。。,
同时第i 个队列中的进程运行,必须是前i-1 个队列中所有进程都运行完
毕后。
通过这种调度算法的好处是不用估计进程运行的时间。
处理机调度的层次和调度算法介绍
一、 调度层次:
绪状态并放入就绪队列中。
1. 高级调度 : 将处于外存的后备队列中的作业调入内存,变为就
2. 低级调度:决定就绪队列中的那个进程应获得处理机。
3. 中级调度: 如果某些作业在运行的过程中由于某些原因被阻塞
1. 先来先服务
2. 短作业优先
了,最后它又满足了相应的调用条件。这个时候中级调度决定把
哪些作业放入就绪队列中。
其是通过等待时间来判断优先级的。(进程调用
其是用运行时间来判断优先级的。(进程调用也
二、 作业调度算法:
也可以用这种方式)
可以用这种方式)
3. 高响应比优先调度算法 (等待时间 + 要求服务时间) / 要
求服务时间 其是用它来判断优先级的。(进程调用也可以用这
种方式)
进程和线程的含义和区别
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源
分配和调度的一个独立单位.
线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基
本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数
器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源
进程之间的切换是非常耗费资源的。而线程在切换的时候只需要少量的资源,
并且同一个进程中的线程相互切换时是不会切换进程的。
1. 调度的基本单元:进程是一个资源的拥有者,当以进程为调度单元的时候,
2. 独立性:进程之间的独立性就比较高,这是因为为了防止进程之间彼此干扰
低。3. 健壮性:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其
和破坏,每个进程都拥有一个独立的地址空间和其它资源,但是一个进程中
的线程,它们是共享进程内存地址空间和资源。所以它们的独立性就比较的
它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆
栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个
进程死掉,所以多进程的程序要比多线程的程序健壮
通过共享某些数据结构或共享存储区来进行通信。
是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享
进程间(IPC)的通信方式
1. 共享存储器系统
2. 管道通信系统
3. 消息传递系统
4. 客户机-服务器系统
文件。又名pipe 文件。
将通信的数据封装到消息中,并利用操作系统提供的一组通信命令(原
语),在进程间实现数据传递。
一般是基于网络型的,比如Socket 通信。
死锁产生的必要条件和怎样处理死锁?
必要条件:互斥条件、请求和保持条件、不可抢占条件和循环等待条件。
避免死锁:一次分配,对资源进行排序后分配,银行家算法。
检测死锁与解除死锁:资源分配图
Window 内存管理方式:段存储,页存储,段页存储。
页存储:
段存储
段页存储
什么是虚拟内存?
是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储
器系统,其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存
速度,而每位的成本却又接近于外存
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的
可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物
理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换
虚拟地址、逻辑地址、线性地址、物理地址的区别?
逻辑地址(Logical Address)是指由程序产生的与段相关的偏移地址部分 段
号 + 段内地址
线性地址:是逻辑地址到物理地址变换之间的中间层。程序代码会产生逻辑地址,
或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启
用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分
页机制,那么线性地址直接就是物理地址。
物理地址:是指出现在 CPU 外部地址总线上的寻址物理内存的地址信号,是地
址变换的最终结果地址
虚拟地址:
常见的页面置换算法:(操作系统书上 p163)
1. 最佳置换算法: 是一种理论上的算法,实际上是不能够实现的,我们只是
用该算法来评价其它算法的优劣。它是置换出以后不用或最长未使用的页面
号,但是我们是不可能预知未来哪个页面号是不用的。
2. 先进先出页面置换算法:每次从内存中置换出页面是最先进入内存的页面。
3. 最近最久未使用算法(LRU):当一个进程所分配物理块中已经装满了页面,
我们可以拿一个队列来实现这个算法。
现在又要访问一个新的页面,这个时候我们就要把最近最久未访问的页面号
给置换出去。算法实现:这个算法我们可以通过一个栈来实现,栈的大小就
是物理块的大小,当栈没有满的时候,我们访问页号的时候,它是先将该栈
中的页号移除(有可能不存在,比如第一次访问这个页号),然后再把该页
号放入栈顶,如果现在栈满了,又放发现放的这个页号没有在栈中,那么就
要把栈底的元素给移除(这个时候栈底的元素就是最近最久未访问的元素),
然后再把要访问的页号放入栈顶,如果发现放的这个页号在栈中,那么就把
栈中对应的页号移除,然后将这个页号放入栈顶。
4. 最少使用算法(LFU):最少使用置换算法中采用了移位寄存器方式,每次
访问某页时,便将该移位寄存器的最高位置为1,再每隔一定时间(例如:
100ms)右移一次。这样,在最近一段时间使用最少的页面将是寄存器中值
5. 简单Clock 置换算法:为每页设置一位访问位,再将内存中的所有页面链接
成一个循环队列,当某页被访问时,其访问位被置为1,置换算法在选择一
页淘汰时,只需检查,页的访问位。如果是0,就选择该页换出,若为1,则
重新将它置0,然后在继续判断队列中的下一个结点。比较重要一点的是:
且把这个位置的访问位置为1,除开这种情况其它的所有操作都要操作完后
如果现在我访问的这个页在队列中存在,我们队列指针时不需要移动的,并
最小的那个页面。
指针往后移动一位。