进程状态和优先级(进程第2篇)【Linux复习篇】

发布于:2024-04-25 ⋅ 阅读:(88) ⋅ 点赞:(0)

目录

一、进程状态

1、进程有什么状态?

2、 Linux下的进程状态有什么?

 二、进程优先级

1、进程优先级是什么?

2、为什么要有优先级 

3、怎么改进程优先级?要改吗?

4、操作系统如何根据优先级开展调度的?什么是LinuxO(1)调度算法?

5、什么是并行,什么是并发?

6、为什么函数返回值能被外部拿到?系统怎么知道执行到哪行代码?寄存器扮演什么角色?


一、进程状态

1、进程有什么状态?

1)什么是运行状态 - R

每个CPU都会维护一个运行队列,该队列维护的是一些进程的task_struct,调度器会在该队列上挑选一个进程来运行,处于该运行队列上的进程的状态就叫运行态

每个进程都有一个调度时间片,该进程在CPU上跑完自己的时间片就切换下一个进程,也就意味着,在一个时间段内,所有进程都会被执行,这种情况叫并发执行。

2)什么是阻塞状态

一个进程需要读取某些资源时,由于资源没有就绪,而需要将该进程放到该资源的等待队列里,此时处于等待队列里的进程的状态就是阻塞状态。

3)什么是阻塞挂起状态

操作系统内部内存资源严重不足时,会将那些处于阻塞状态的进程的代码和数据先放到磁盘中,只保留PCB,当资源就绪时,再重新加载进来,此时就叫阻塞挂起状态。

2、 Linux下的进程状态有什么?

R(running):运行态(带+号表示前台运行)

S(sleeping):阻塞态(浅度睡眠,可被唤醒,即可随时响应外部,如kill等)

D(disk sleep):深度睡眠,让进程在等待磁盘写入完毕期间,这个进程不能被杀掉。

T(stopped):也是一种阻塞状态,可能是在等待资源,也可能是收到了信号(应用场景:gdb调试时打断点)

X(dead):终止态

Z(zombie):僵尸态,当一个进程退出时,会先维护它退出状态和资源一段时间,等父进程来回收,回收之后子进程才能释放其相关资源(PCB)。

如果一直维持僵尸状态,就会引发内存泄漏问题。

如果父进程先退出,子进程会怎么样?

子进程变孤儿进程,会被1号进程领养。

 二、进程优先级

1、进程优先级是什么?

进程对资源谁先访问,谁后访问。

2、为什么要有优先级 

资源是有限的,进程是多个的,进程之间是竞争关系,如果进程长时间得不到CPU资源,就会引发进程的饥饿问题。因此操作系统要保证进程之间良性竞争,就需要有优先级。

3、怎么改进程优先级?要改吗?

PRI(priority)就是进程的优先级,值越小,越早被执行。

NI(nice):nice值,进程优先级的修正数据,取值范围(-20~19,共40个等级)。

 

PRI(new) = PRI(old) + nice(nice为负时,优先级变高)实际old的PRI是80

也就是说实际 PRI = 80+nice

具体操作:

输入top进入此界面:

按:r(renice),按照要求输入pid和nice值。

不推荐改进程的优先级。普通用户不能调,root才可以 

4、操作系统如何根据优先级开展调度的?什么是LinuxO(1)调度算法?

正在调度的队列的时间片都跑完后,就跑另一个队列里的进程,两个队列交替。

怎么高效地判断每个子队列是否为空?

利用位图,用比特位的0/1表示子队列是否为空,这样就可以用近O(1)的时间复杂度来进行进程调度,这种调度算法就叫Linux内核2.6的O(1)调度算法。

5、什么是并行,什么是并发?

并行:多个进程在多个CPU下分别同时进行运行(不如说两个单核CPU会有两个运行队列,意味着在同一时刻一定会有两个进程在同时运行,这就是并行)

并发:多个进程在一个CPU上采用进程切换的方式,在一段时间内,让多个进程得以推进,称为并发。 

6、为什么函数返回值能被外部拿到?系统怎么知道执行到哪行代码?寄存器扮演什么角色?

通过寄存器。return a;move eax 10(假设a的值是10) 

程序计数器pc/eip:记录当前进程正在执行的指令的下一行指令的地址。

为了提高效率,将进程的高频数据放入寄存器中,寄存器保存的是进程的相关数据,即进程上下文。进程在从CPU上离开时,要将自己的上下文数据保存好带走,为了未来恢复。

进程切换:保存上下文、恢复上下文。 


网站公告

今日签到

点亮在社区的每一天
去签到