进程的相关知识

一.概念:进程是程序执行的过程 ,它会消耗cpu资源,内存源,硬盘,网络带宽等

进程和程序的区别:程序是可执行文件,是硬盘上的一个东西(静态)

                                进程会干活  会消耗一些硬件资源

进程和程序的联系:如果双击程序,操作系统就会把可执行文件中的数据和指令,加载到内存中,并且让cpu去执行这里的指令  完成一系列相关的工作,运行起来动态的是进程。

二.进程的管理:先描述  在组织

1.描述:会使用专门的结构体来记录进程里的每一个属性

PCB:(进程控制块)(Linux 里的PCB 在源码中是一个task_struct结构体

(通用叫法  各种系统用来描述进程的各个部分都可以称为 进程)

2.会用一系列的数据结构,把多个进程进行有效的组织,随时方便进行遍历,查找,汇总数据

                     通常是使用双向链表的方式进行组织的(针对Linux来说)

使用双向链表来组织的时候

1)在查看进程的链表本质上就是在遍历整个链表

2)创建一个进程就是创建了一个pcb结构体,并插到链表上

3)销毁一个进程就是把pcb结构体从链表上删除并释放

pcb中的信息:

1.pid进程的标识:同一个系统上,同一时刻,每个进程的pid一定都是不同的

如:有时候运行的QQ音乐.exe,实际上可能会涉及到多个进程

2.内存指针:表示了该进程对应的内存资源

内存资源里存从.exe可执行程序中加载过来的指令和数据

指令:二进制的指令  都是在程序员开发这个程序的时候最终编译的结果(也就是程序员写代码的逻辑)

数据:在执行这些指令时  会产生一些数据,要保存一些中间的数据

3.文件描述符:

和硬盘资源有关

硬盘是硬件,应用程序一般不会触碰到硬件这一层的

实际上是操作系统抽象成文件这样的概念,程序操作的是文件,文件实际上是存储在硬盘上的

每一个进程都会有一个“文件描述符表”来记录,当前进程正在使用那些文件

操作系统打开文件就会产生一个“文件描述符”就像文件身份标识一样,当然知识在进程内部生效

同时  使用文件标识符(类似于数组),把文件描述符给组织起来

fopen:先打开

fread:再调用

fwrite

fclose:最后关闭

4.PCB=>进到程调度相关的属性

1)状态:就绪状态:已经做好了在cpu上执行的准备

                阻塞状态/睡眠状态:进程没有准备好调度到cpu上

2)优先级:系统在进行调度时 也不是完全公平,也会根据优先级的不同来决定时间分配的的权衡  就可以把系统资源调配到更重要的进程上了

3)上下文:这些进程是轮着上的   一次运行不完就要 保证下一次上cpu 运行的时候能够从上次运行到的位置的往后运行

4)记账信息:想当于一个统计信息

     会统计每一个进程在cpu上执行了多久,执行了多少指令

     是对于进程调度工作的一个兜底

小结:这些属性主要是直观的认识cpu 是怎么样进行调度的

三.虚拟地址空间=>进程的隔离性

每个进程都需要有一定的内存资源

(早期的操作系统就直接把物理内存直接分配给进程   就会带来一个严重的问题

只要有一个进程代码内部出现bug,就会影响其他的进程)

后来操作系统内就引入了"虚拟地址空间" 来解决上述问题

 这样设定后 每个进程的有效的虚拟地址都是固定的范围

进程使用该虚拟地址都需要操作系统进行转化成物理地址的过程  这个转化过程中  都可以针对虚拟地址是否有效做一个校验

每个进程自己承担自己的问题  就不会影响到别人  提高了整个系统的稳定性

四.进程间的通信

进程之间用来通信的办法有很多  无论那个都需要找一个公共的区域  多进程都能访问的区域

使用公共区域来完成后面的交换

1)基于文件(公共区域硬盘)

2)基于网络(socket)(公共区域网卡)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值