做搜狗pc网站优化点,百度公司招聘官网,广东省建设教育协会是什么网站,wordpress釆集插件破解1.什么是管理#xff1f;
那在还没有学习进程之前#xff0c;就问大家#xff0c;操作系统是怎么管理进行进程管理的呢#xff1f;
很简单#xff0c;先把进程描述起来#xff0c;再把进程组织起来#xff01;
我们拿大学为例子 最典型的管理者——校长最典型的被管理…1.什么是管理
那在还没有学习进程之前就问大家操作系统是怎么管理进行进程管理的呢
很简单先把进程描述起来再把进程组织起来
我们拿大学为例子 最典型的管理者——校长最典型的被管理者——学生 1.我们平时见得到校长吗见不到——管理者和被管理者是不需要见面的 2. 这个就引出一个新的问题管理者在不见被管理者的情况下如何做好的管理 我们在学校就清楚我们考试考了多少分旷了多少节课个人信息校长想看都能看到就算校长来见我们也是为了获取我们更多的信息所以只要校长有足够多的我们的信息不见面都可以对我们进行有效的管理管理的本质就是通过对数据的管理达到对人的管理 3.管理者和被管理者面都不见管理者怎么拿到被管理者的数据呢 我们还是拿校长和学生为例校长是通过老师辅导员来获取学生的数据 4.拿老师和辅导员是不是管理者 不是因为老师和辅导员只是在执行他们该做的东西所以他们不是真正的管理者他们更多的是执行者校长相当于操作系统老师辅导员相当于驱动程序学生相当于被管理的软硬件资源这样子就理解了操作系统怎么管理底层的软硬件资源了 5.操作系统怎么管理软硬件资源——先描述后组织 操作系统只需要获取对应的软硬件资源的状态数据即可获取状态数据的这个过程是通过驱动程序来执行的虽然每个学生的信息都不同但是他们都有下面这些属性——电话姓名身高体重成绩籍贯......校长可以通过一个结构体来记录这些属性这样子学生的属性不就被描述起来了吗——这个有点像面向对象编程里的抽象啊 struct student
{
char name[20];
int number[20];
...
struct student*next;
}; 这样子我们就可以使用一个结构体对象来记录一个学生的信息每个学生都带有一个指向下一个学生的结构体指针这样子就很好管理了这样子校长对学生的管理工作就变成了对链表的增删查改校长找成绩最高的同学只需要不断遍历链表即可 上面这个把学生描述成结构体的过程叫做描述的过程将每个学生结构体通过结构体指针链接成一条链表的过程叫做组织的过程
我们的软硬件资源被操作系统管理操作系统通过软硬件的数据对它进行管理可是软硬件资源的数据太大那么操作系统很难做管理
但是每一种设备都有共同的属性我们描述清楚设备的属性然后通过一定方法组织起来
这样子操作系统对软硬件的管理就变成了对数据结构的管理 管理的核心理念 操作系统管理软硬件资源时必须先描述起来再组织 在操作系统中我们管理对象最终都可以转变为对某种数据结构的增删查改——这个一般叫建模 描述事物的方法c语言的structc的类等 组织方式依赖于某种数据结构 这个咋这么像面向对象编程的抽象c的类STL容器这个直接给了我们提供了这样一种描述事物的方式这样子就能完成对事物的统一管理 理解了管理的概念我们就会知道 操作系统中注定存在大量的数据结构 linux操作系统是c语言写的c语言只能用结构体来描述对象所以linux只能用struct来描述对象
2.c/c库函数调用和系统调用的关系 我们用c语言编写了一个程序在屏幕打印一个hello world但是在但是屏幕是硬件硬件是受操作系统管理操作系统不信息任何人所以操作系统肯定封装了一个c语言函数调用接口
所以他们是上下层的调用和被调用的关系库函数在上系统调用在下
3.进程
进程一个已经加载到内存的程序进程正在运行的程序进程任务 我们可以查看linux的进程 widows里面也有进程 事实上 进程就是内核PCB数据结构对象你自己的代码和数据 3.1.PCB 我们知道一个操作系统可以同时进行多个进程 程序要运行的话就得先把相关数据加载到内存中等待cpu运行产生进程那么加载进内存该如何管理呢?操作系统需要直接面向加载到内存中的代码嘛 答案是不需要。 我们可以先把进程类比上面的学生先描述进程再把它们组织起来 任何一个进程在加载到内存的时候形成真正的进程的时候操作系统要先创建描述进程的结构体对象——PCBprocess control block也就是进程控制块
3.1.1.理解PCB的本质 人是怎么样辨别认识一个事物或者对象 都是通过属性认识的 举个例子叫你自我介绍你基本都是在讲你的属性——名字兴趣才能成就籍贯等等 当属性的集合够多的时候你就能知道这个对应的是什么了 比如它是一个人他是中国最顶级的动作明星他是男生他演过《十二生肖》 我们就很容易得知这个人就是成龙 同样的我们描述进程就是把进程足够多的属性描述起来多到只有一个进程与之匹配那么我们就能将这堆足够多的属性集合来描述进程这个集合就是PCBlinux操作系统是c语言写的c语言只能用结构体来描述对象所以linux只能用struct来描述对象所以PCB就是一个结构体 这个也是面向对象编程的核心理念 3.1.2.PCB的历程/作用
进程创建时操作系统先为它新建一个PCB该结构之后常驻内存任意时刻都可以存取并在进程结束时删除。PCB是进程实体的一部分是进程存在的唯一标志。进程执行时系统通过其 PCB 了解进程的现行状态信息以便操作系统对其进行控制和管理进程结束时系统收回其PCB该进程随之消亡。 3.在进程的整个生命期中系统总是通过PCB对进程进行控制的亦即系统唯有通过进程的PCB才能感知到该进程的存在。 当操作系统欲调度某进程运行时要从该进程的 PCB 中查出其现行状态及优先级在调度到某进程后要根据其PCB 中所保存的处理机状态信息设置该进程恢复运行的现场并根据其PCB中的程序和数据的内存始址找到其程序和数据进程在运行过程中当需要和与之合作的进程实现同步、通信或访问文件时也需要访问 PCB当进程由于某种原因而暂停运行时又需将其断点的处理机环境保存在PCB中。 3.2.PCB的组织方式
在一个系统中通常存在着许多进程的PCB有的处于就绪态有的处于阻塞态而且阻塞的原因各不相同。操作系统怎么管理这么多进程呢 为了方便进程的调度和管理需要将各进程的PCB用适当的方法组织起来。 这样子对进程的管理就变成了对数据结构的增删查改 目前有下面几种组织方式
1.线性表方式不论进程的状态如何将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况不适合频繁的进程调度2.索引表方式该方式是线性表方式的改进系统按照进程的状态分别建立就绪索引表、阻塞索引表等。其中进程阻塞可能由于I/O请求、申请缓冲区失败、等待解锁、获取数据失败等原因造成将其组成一张表忽略了进程的优先级不利于进程的唤醒。 3.链接表方式系统按照进程的状态将进程的PCB组成队列从而形成就绪队列、阻塞队列、运行队列等。 3.3程序段
程序段就是能被进程调度程序调度到CPU执行的程序代码段。
3.4数据段
一个进程的数据段可以是进程对应程序加工处理的原始数据也可以是程序执行时候产生的中间或最终结果。 4.Linux是怎么取管理进程的
课本上称之为PCBprocess control blockLinux操作系统下的PCB是: task_struct 。
task_struct是Linux内核的一种数据结构它会被装载到RAM(内存)⾥里并且包含着进程的信息。
4.1.task_ struct内容分类
实际上这个结构体的成员非常多我们只列举最主要的 标示符: 描述本进程的唯一标示符用来区别其他进程。状态: 任务状态退出代码退出信号等。优先级: 相对于其他进程的优先级。程序计数器: 程序中即将被执行的下一条指令的地址。内存指针: 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据[休学例子要加图CPU寄存器]。IO状态信息: 包括显示的I/O请求,分配给进程的IO设备和被进程使用的文件列表。记账信息: 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。其他信息 4.3.组织进程
可以在内核源代码里找到它。
所有运行在系统里的进程都以task_struct双向链表的形式存在内核里。
4.4.查看进程
(1)进程信息可以通过 /porc系统文件夹查看具体查看那个进程需要得知其标识符(PID)。 看到以下有很多的数字还是蓝标的数字就是PID蓝标说明这是个目录 比如接下来我想看看PID为1的进程信息。 这个信息查看的不够详细所以可以带上 -l选项查看详细信息 (2)用ps工具来查看
关于ps工具咱们只需要记住只查看自己的bash进程选项为 -l查看系统所有运行的进程选项为aux这个不加-。 这里可以看到标识符PID展示出来了还有一个PPID这是父进程的PID我们惊奇的发现下面的ps指令的PPID是上面bash的PID。
命令行上的命令的父进程基本上都是bash。