网站建设 回本,建设网站翻译英文翻译,网站推广策划方案的主要内容?,wordpress免插件图床标题#xff1a;[Linux] Linux操作系统 进程的状态 个人主页#xff1a;水墨不写bug #xff08;图片来源于网络#xff09; 目录 一、前置概念的理解
1.并行和并发
2.时间片 3.进程间具有独立性 4.等待的本质 正文开始#xff1a; 在校的时候#xff0c;你一定学过《… 标题[Linux] Linux操作系统 进程的状态 个人主页水墨不写bug 图片来源于网络 目录 一、前置概念的理解
1.并行和并发
2.时间片 3.进程间具有独立性 4.等待的本质 正文开始 在校的时候你一定学过《操作系统原理》这本书操作系统这个学科作为计算机哲学科目无疑非常难以理解。再加上操作系统原理这本书并不是针对某一种操作系统而写的书所以其内的大多数解释概念解释 含糊不清难以琢磨。这不是作者的原因而是选题的原因因为它讲的是操作系统这个抽象后的概念对于某一种具体的操作无法落实到具体的事例什么意思呢 比如MacOSWindowsLinux对于某一概念本质是一样的但是处理方法不同于是操作系统原理就笼统的用提取出来的概念来讲。再比如模板大家都知道吧《操作系统原理》这本书就好比是仅仅是对着模板来讲解而不是一个具体的函数。一般而言我们理解模板的正常逻辑是从一个具体函数然后上升到对模板的理解的是从具体到抽象的过程而不是仅仅停留在模板只讲抽象的概念。 这也就是你觉得操作系统难的原因。本文就沿着Linux这一具体的操作系统来讲解操作系统的概念。之所以选择Linux是因为Linux是最受欢迎的高效、免费的操作系统企业级应用最多。 在理解进程的概念之前我们需要先铺垫几个重要的概念 一、前置概念的理解
1.并行和并发 并发假设我们只有一个低配置的单核的CPU这个时候我们仍然是可以启动多个进程的为什么呢这就是并发 CPU执行进程代码不是把进程代码执行完才开始执行下一个而是给每一个进程预分配一个时间片基于时间片依次调度各个进程进行调度轮转这就是并发。即便只有一个CPU这一个CPU仍然可以凭借并发来在人眼无法分辨的时间段内极速切换达到“同时”运行多个进程的目的。 并行多个进程在多个CPU下分别同时进行称为并行。 2.时间片 在Linux操作系统中时间片Time Slice是操作系统进行 进程调度 时分配给每个进程运行的一段固定时间。Linux以及许多其他现代操作系统使用基于时间片的轮转调度算法Round-Robin Scheduling来管理CPU资源的分配以确保所有进程都能公平地获得执行时间。 当一个进程被调度到CPU上运行时它会被分配一个时间片。在这个时间片内进程可以执行其任务。当时间片结束时无论该进程是否已经完成其工作操作系统都会暂停该进程的执行并将其放回就绪队列的末尾或根据调度算法的其他规则重新排序。然后操作系统会选择另一个进程来执行为其分配一个新的时间片。 对于大多数民用级Linux/Windows操作系统使用的是分时操作系统也就是上面的这种采用时间片调度的操作系统。而对于一些特殊需求的高精度高需求的场景比如航空航天车辆自动驾驶等就不能再使用分时操作系统因为毫秒级别的误差就可能导致事故。这些场景就需要采用实时操作系统。 3.进程间具有独立性 进程间具有很强的独立性这里目前不需要很深的理解。 父进程创建的子进程挂掉之后父进程不会收到影响比如你在本地IDE上写一个程序但是出现空指针导致程序挂掉了你写的进程结束了但是IDE不会因此挂掉。 4.等待的本质 在Linux下进程有许多种不同的状态之所以为进程区分状态是为了提高效率。一个进程实际并没有用到CPU资源但是却占用内存这样的做法显然不合理。 Linux进程的状态有
/*
* The task state array is a strange bitmap of
* reasons to sleep. Thus running is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] {
R (running), /* 0 */
S (sleeping), /* 1 */
D (disk sleep), /* 2 */
T (stopped), /* 4 */
t (tracing stop), /* 8 */
X (dead), /* 16 */
Z (zombie), /* 32 */
};总体介绍 CPU根据一定的调度算法依次调度每一个进程。 运行的或者是准备好的进程处于运行队列中。只要进程在运行队列中该进城就处于运行状态表示“进程已经准备好了可以随时被CPU调度进行运算” 当一个进程被阻塞的时候这个进程就不需要被放入运行队列中因为它不需要被CPU调度。 那么这个进程就会被加载到不同的硬件的数据结构中等待硬件的响应这个时候的进程就处于睡眠状态。 睡眠状态根据进程重要程度的不同分为可中断睡眠和不可中断睡眠。 运行和阻塞的本质 是让不同的进程处在不同的队列中。 R运行状态running : 并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。 S睡眠状态sleeping): 意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠interruptible sleep D磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待IO的结束。 T停止状态stopped 可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。 X死亡状态dead这个状态只是一个返回状态你无法在任务列表里看到这个状态 完~
未经作者同意禁止转载