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

第一次作业:深入源码分析进程模型相关推荐

  1. 第一次作业:深入Linux源码分析进程模型

    一.进程的概念 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stack region).文本区域 ...

  2. licode源码分析-线程模型

    licode源码分析-线程模型 服务器一般都会服务于大量的用户,所以服务端程序的性能往往决定服务用户的多少.现在服务器上的CPU都是多核的,服务端程序为了充分发挥CPU的性能,会使用多进程或多线程.而 ...

  3. v24.03 鸿蒙内核源码分析(进程概念) | 如何更好的理解进程 | 百篇博客分析HarmonyOS源码

    子曰:"民可使由之,不可使知之." <论语>:泰伯篇 百篇博客系列篇.本篇为: v24.xx 鸿蒙内核源码分析(进程概念篇) | 如何更好的理解进程 进程管理相关篇为: ...

  4. v56.05 鸿蒙内核源码分析(进程映像) | 程序是如何被加载运行的 | 百篇博客分析OpenHarmony源码

    子畏于匡,颜渊后.子曰:"吾以女为死矣."曰:"子在,回何敢死?" <论语>:先进篇 百篇博客系列篇.本篇为: v56.xx 鸿蒙内核源码分析(进程 ...

  5. 第一次作业:对于Linux2.6.0源码中进程模型的分析

    摘要: 作为第一次写博客,可能在排版,页面布局等方面会有大大小小的失误和不足,希望阅读者可以指出,笔者会继续学习,锻炼自己的博客水平:作为第一次分析Linux操作系统,基于进程模型的理解,在不是很熟悉 ...

  6. Linux kernel 3.10内核源码分析--进程上下文切换

    一.疑问 进程调度时,当被选中的next进程不是current进程时,需要进行上下文切换. 进行上下文切换时,有一些问题不太容易理解,比如: 1.进程上下文切换必然发生在内核态吗? 2.上下文切换后原 ...

  7. Laravel源码分析之模型关联

    上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对象的方式优雅地把数据表之间的 ...

  8. brpc源码分析——线程模型

    brpc线程模型 从一个server的启动过程谈起,我们这里以echo server为例: int main(int argc, char* argv[]) {// gflags介绍:https:// ...

  9. Linux kernel 3.10内核源码分析--进程退出exit_code

    进程退出时,有相应的exit_code,可用于判断进程退出的原因. 比如,waitpid()接口用于等待进程退出,此时被等待退出的进程的返回值比较重要,需要用其来判断进程退出的相应状态,而这就是通过进 ...

最新文章

  1. java操作跨页的word cell,“excle如何打印不出现断行“EXCEL中,如何不跨页断行打印或显示,谢谢...
  2. jpa SessionFactory事物失效
  3. python_day1
  4. 硅谷顶级VC发声:AI技术公司毛利实在太低,人工和算力成本太高
  5. Flash 图片轮换效果
  6. 利用反射搭建orm框架
  7. 毛坦厂中学是“高考工厂”?白岩松:我做不出嘲讽它的事情!
  8. Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局...
  9. 决策树和随机森林(上)
  10. EHCache 初步使用指南
  11. ElasticSearch 实践过程中遇到的几个小问题
  12. MySQL/MariaDB的response time插件
  13. jxl和POI的区别
  14. 银隆新能源:涉嫌诈骗财政资金过亿 孙国华等人被刑拘
  15. 有可直接运营的IPTV/OTT系统ma?
  16. 触摸屏驱动开发——转载
  17. 红帽子linux 9.0下载,红帽子 RedHat linux 9.0 简体中文正式版 下载地址
  18. 【VHDL】VHDL设计一个分频器
  19. android toast 自定义view,分享Android中Toast的自定义使用
  20. 小心,Android木马工具SpyNote免费啦!远程监听就是这么简单

热门文章

  1. 【Java】在eclipse中使用maven进行项目构建 入门篇
  2. Aspose.Words for .NET
  3. codeforces 111A/112C Petya and Inequiations
  4. No resource found that matches the given name 'Theme.AppCompat.Light'.
  5. linux下好用软件全记录
  6. 由几个月前写的(验证码利用ashx一般处理程序来做),修改为不用以一般处理程序...
  7. 配置 IIS 7 显示详细错误信息
  8. SQL基础实例(学生课程系统)
  9. 【python】 邮件发送-----zmail
  10. 【Hadoop】Hadoop1.X版本与Hadoop2.X的区别