Linux操作系统原理笔记

在Linux操作系统内核内部,进程是通过一个链表,而且是一个双向链表来管理的。

进程描述符:每一个进程都有其描述符,每一个描述符彼此之间都有关联性的。

 

双向链表:

 

一个进程内部可能包含多个线程。

扫描二维码关注公众号,回复: 7281410 查看本文章

上下文切换(Context swtch)

假如说进程A从当前CPU上被拿走,切换成进程B,进程A有自己的描述符(task_struct),且被挂起。被Suspend(栈指针),CPU内部,包括指令计数器等保存下来。

保存在进程描述符文件当中。而进程描述符是由内核维持。所以这些信息都保存在内核中。

当A进程被切换出去,就意味着B进程被调度上来。这一过程被叫做恢复线程(Resume)

总的过程就叫做上下文切换。

 

进程A------CPU------进程B

 

上下文切换由谁完成?----由内核。

这意味着:

      每一次进程切换都要先从用户空间转到内核模式,然后再到用户模式。

注意:不可能由一个进程到另一个进程,必须由内核来指挥完成。

 

所以CPU的整体时间就分为两部分:

一部分是用户空间所有进程加起来的计的时间

另一部分是内核空间所占用的时间

 

不管是那个进程,CPU总是分配到用户空间一部分,又分配到内核空间一部分。

 

Linux支持进程抢占。

 优先级高的可以抢占优先级低的。

 但不是随时都可以抢占,-------系统时钟。

系统时钟:

   有内部的时间频率。

   Tick:滴答----时间解析度

   操作系统是怎么记录时间的?

   每一次滴答(tick),都会产生可抢的时钟中断。

滴答来了,就可以抢了。

 

Linux的进程类别:

1、 交互式进程(IO密集型):等待IO,对CPU要求量特别小。

2、 批处理进程(CPU密集型):也可以理解成守护进程。

3、 实时进程(Real-time):随时运行,优先级非常高的进程

 

对于PC(桌面):交互式进程优先级应该是高优先级的,IO,,,,,

对于服务器来说:一般以批处理为主(CPU)

 

现在很多调度器可以这样来实现:

     让批处理进程多一些时间片。----时间片比较大,但优先级低。

     而交互式进程时间片少,但优先级高。

   调度就是按照优先级来完成的。

 

Top命令是用来显示系统运行的进程信息。

 

Linux优先级:

1、 实时进程优先级:1-99   数字越小,优先级越低。通常与内核相关。

2、 静态优先级:通常用来描述用户进程优先级。

100-139 数字越小,优先级越高。

所以优先级范围是1-139

实时优先级比静态优先级高。

 

很显然,内核进程通常都是实时优先级。

TOP

 

显示RT的为实时进程。

猜你喜欢

转载自www.cnblogs.com/dongxu2019/p/11520469.html