linux系统组成

Linux 内核主要由 5 部分组成,分别为:进程管理子系统内存管理子系统文件子系统网络子系统设备子系统

系统调用层(系统调用子系统)进行统一管理,应用层通过系统调用层的函数接口与内核进行交互, 用户应用程序执行的地方是用户空间,用户空间之下则是内核空间, Linux 内核正是位于内核空间中。
 

1、进程管理子系统

进程管理的核心就是进程的调度。在 Linux 内核中,进程调度的单元是进程, 进程调度控制系统中的多个进程对 CPU 的访问, 从宏观上看,系统中的进程在 CPU 中是并发执行的。此外内核通过系统调用提供了应用程序编程接口, 例如:创建新进程(fork, exec),结束进程(kill, exit),并且提供了控制进程,同步进程和进程间通信的接口。

进程与程序的区别:

    程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。

    进程: 是一个执行中的程序,它是动态的实体。

进程的四要素:

1. 有一段程序供其执行,这段程序不一定是某个进程所专有,可以与其他进程共用。

2. 有进程专有的系统堆栈空间(也可以称之为内核堆栈空间)。

3. 在内核中有一个 task_struct 数据结构,即进程控制块。有了这个数据结构,进程才能被内核调度器识别并参与内核调度,除此之外它还记录着进程所占有的各项资源。

4. 除上述的专有的系统堆栈空间外,进程还需要有独立的用户堆栈空间, 这就是mm_struct 数据结构, 该数据结构位于 task_struct 结构中,字段名称为 mm。

每个进程都有自己的堆栈,内核在创建一个新的进程时,在创建进程控制块task_struct 的同时,也为进程创建自己堆栈。一个进程有 2 个堆栈,即用户堆栈和系统堆栈;用户堆栈的空间指向用户地址空间,内核堆栈的空间指向内核地址空间。当进程在用户态运行时, CPU 堆栈指针寄存器指向用户堆栈地址,使用用户堆栈,当进程运行在内核态时,CPU 堆栈指针寄存器指向的是内核栈空间地址,使用的是内核栈。在 Linux 中进程与线程的区分也不是十分严格,一般在讲到进程时常常也包括了线程,以上的进程四个要素是必要条件,缺了其中任何一条都不能称其为“进程” ,如果完全没有用户空间,即 mm_struct 为 NULL,那么可以称它为内核线程,如果有共享的用户空间,那么可以称之为用户线程。

进程调度:

进程调度是进程管理子系统中最重要的一个功能,它决定了哪个进程可以运行,什么时候运行,什么时候停止,它实际上就是一个管理进程之间使用 CPU 资源的管理程序,因此 Linux 内核必须提供一种方法,让各个进程之间尽可能公平地共享 CPU 资源,并且还需要考虑各个进程的优先级。因此进程调度器的设计就要解决如何有效地为各个进程分配其使用 的 CPU 资源时间,同时又要达到良好的用户体验效果,此外调度器还需要解决一些互相冲突的情况,例如既要实现实时任务的最小化响应时间, 又要最大限度地提高CPU 的总体利用率等。

在 Linux2.6 版本之后,进程调度器使用新的进程调度算法——Completely Fair Scheduler, 简称 CFS,即完全公平调度算法,该算法会按所需分配的计算能力,向系统中每个进程提供最大的公正性,或者从另外一个角度上说,它试图确保没有进程被亏待。经过多年来的测试,完全公平调度算法在高负载情况下依然有极其出色的性能, 它负责将CPU 资源,分配给正在执行的进程,目标在于最大化程式互动效能,最小化整体 CPU 的运用,这个算法使用红黑树来实现,算法效率为 O(log(n))。

进程状态: 

    可中断睡眠态 S (TASK_INTERRUPTIBLE):处于这个状态的进程因为等待某些事件的发生而进入睡眠状态(比如等待 socket 连接、等待信号量等) 。当这些事件发生的时候进程将被唤醒, 如产生一个硬件中断、释放进程正在等待的系统资源或是传递一个信号都可以是唤醒进程的条件。一般情况下系统的大多数进程都是处于这个状态的,在终端可以通过 ps 命令查看系统进程状态。
    不可中断睡眠状态 D (TASK_UNINTERRUPTIBLE): 不可中断睡眠状态又被称作深度睡眠态,它与可中断睡眠状态类似,但是它有一个例外,那就是把信号传递到这种睡眠状态的进程不能改变它的状态,也就是说它不响应信号的唤醒,这种状态一般由 IO 引起,同步 IO 在做读或写操作时(比如进程对某些硬件设备进行操作, 等待磁盘 IO, 等待网络 IO) , 此时 CPU 不能做其它事情,只能处于这种状态进行等待, 这样一来就能保证进程执行期间不被外部信号打断,但这种状态时间非常短,很难在终端中将它捕获到。
 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值