第一次作业:深入源码分析进程模型
Posted pmmd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一次作业:深入源码分析进程模型相关的知识,希望对你有一定的参考价值。
本文针对linux罗列一些个人的理解或看法
这是本人第一次写博客,有写得不好的地方请见谅。
进程是什么
当我们打开任务管理器的时候,我们可以看到这样的画面:
从这里我们可以看到进程的页面,当然这样的理解是浅显的,详细的来说进程就是:
可执行的程序文件(ELF格式)被加载到内存当中,然后让CPU逐条执行其代码,根据代码作出相应的动作,这样一个动态进程就产生了。
当一个程序文件被执行产生一个进程时,内核将会产生一个task_struct结构体,来承载该进程运行后所需要的所有资源,随着进程的运行,各种资源被分配和释放,是一个动态的过程。
使用命令:ps -A可以查看所有进程信息,例:
操作系统是怎么组织进程的
进程是动态的,它既会产生也会消失,或称为死亡。每个子进程都有相应的父进程,换个说法就是他们都由各自的父进程产生,子进程如果死亡,父进程就会回收其资源。相反,若父进程死亡,则子进程进入孤儿态,将由1号进程回收其资源。
一.进程链表
每个task_struct中都有一个tasks的域来连接到进程链表上。
而这个链表的头是init_task是0号进程的PCB,它永远不会被撤销。也就是Init_task的PCB是
由编译器预先分配的,在程序运行的过程中一直存在,直到程序结束。
二.哈希表
因为进程链表的方式十分低效,因为其时间复杂度为O(N),相比之下,哈希表查找的方式就要快上许多。
哈希表(也称为散列表)它是依据关键码值(Key value)而直接进行訪问的数据结构。就是说,它通过把关键码值映射到表中一个位置来訪问记录。以加快查找的速度。这个映射函数叫做哈希函数。存放记录的数组叫做哈希表。
哈希表的经常使用构造方法有:
(1)直接定址法
(2)数字分析法
(3)平方取中法
(4)折叠法
(5)随机数法
(6)除留余数法
进程状态如何转换
一.进程有哪些状态:
①就绪状态
当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态就称为就绪状态。
在一个系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列,称为就绪队列。
②执行状态
进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态;在多处理机系统中,则有多个进程处于执行状态。
③阻塞状态
正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
二.进程如何转换:
一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。
①就绪→执行处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
②执行→就绪处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。
③执行→阻塞正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
④阻塞→就绪处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
二.状态转换图:
进程是如何调度的
一.什么是调度:
当同时又多个程序系统时,处理机经常来不及处理完所有进程,那么进程就会争抢处理机。而调度则是将处理机进行分配,按照某种算法“公平,高效”地选择进程以分配处理机运行,实现并发执行。处理机是多道程序操作系统的基础,是操作系统设计的核心问题。
二.调度的方式:
所谓进程调度方式是指当某一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更髙的进程进入就绪队列,此时应如何分配处理机。
通常有以下两种进程调度方式:
1) 非剥夺调度方式,又称非抢占方式。是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞状态时,才把处理机分配给更为重要或紧迫的进程。
在非剥夺调度方式下,一旦把CPU分配给一个进程,那么该进程就会保持CPU直到终止或转换到等待状态。这种方式的优点是实现简单、系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统。
2) 剥夺调度方式,又称抢占方式。是指当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更为重要或紧迫的进程。.
谈谈自己对该操作系统进程模型的看法
Linux 和 Windows 系统的进程结构都相当复杂。对于初学者来说想要理解不是一件十分容易的事情,一个进程就是一个正在执行程序的实例,每次我们电脑某个游戏,文件卡死的时候,我们需要通过任务管理器来中断进程,在以前,我只知道这是用于处理死机情况的方法,但是在现在学习操作系统这门课的过程中,我对于这种操作有了一定的理解。在我看来,在将来成为一名程序员走上工作岗位之前,了解学习操作系统进程的过程是十分必要的
参考资料
http://www.jb51.net/LINUXjishu/151851.html
https://blog.csdn.net/fdssdfdsf/article/details/7894211
https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B%E6%A8%A1%E5%9E%8B/20837135
https://blog.csdn.net/chengonghao/article/details/50981214
以上是关于第一次作业:深入源码分析进程模型的主要内容,如果未能解决你的问题,请参考以下文章