博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一次作业:深入源码分析进程模型
阅读量:5892 次
发布时间:2019-06-19

本文共 2391 字,大约阅读时间需要 7 分钟。

本文针对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

 

转载于:https://www.cnblogs.com/pmmd153575/p/8977405.html

你可能感兴趣的文章
java对象的排序_Java对象排序两种方法
查看>>
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
java 面向对象基本概念_Java面向对象-面向对象编程之基本概念
查看>>
java数值保留2位小数_java中如何使Double类型的数值保留两位小数问题
查看>>
php数组分行输出json_php数组输出这样的json
查看>>
Ubuntu 12.04安装
查看>>
mysql client命令行选项
查看>>
vc遍历网页表单并自动填写提交 .
查看>>
log4j
查看>>
自定义TabControl
查看>>
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
wordpress wp_head()函数 浏览器顶部 空白28px 解决办法
查看>>
读书笔记:改变人心的技巧
查看>>
MATLAB实现频数表——hist的使用
查看>>
iphone 线程 NSCondition NSThread
查看>>
NSURLConnection下载文件并显示进度(HEAD)
查看>>
在Firefox中使用超级Bookmarklet
查看>>
Content type and column用法示例代码来自SharePoint会议
查看>>
设计模式:外观模式(Façade Pattern)
查看>>