操作系统的进程管理(汇编角度)

文章目录

  • A process includes:
  • process state(进程状态)
  • PCB(进程控制块)
  • 进程的创建,加载执行,等待终止
  • 并发软件设计的主要技术路线
    • apache和IIS
    • firefox,chrome,IE

操作系统进程的概念最早来自于jobs(作业),前面的程序运行完,后面的才能运行,这是一个弊端。于是出现了分时的概念,程序你跑一会,我跑一会。一个程序运行起来了,它就是一个进程,如果是静态的,它就是程序。

A process includes:

program counter and other registers
text section代码段
stack放置局部分配的变量
data section
heap放置动态分配的程序
如果撞到一起会发生内存不足。理论上,一个程序申请的进程内存是0-4G

操作系统的进程管理(汇编角度)

等待后不直接去运行件设计理念的问题,一个进程等待态当时有另一个进程在运行,会发生碰撞,增加代码的复杂度
就绪态-等待状态待发生的条件是出现IO请求或需要等待一个事件,所以说转去等待需要系统调用,系统调用需要cpu资源,就绪态没有cpu资源,只有运行态时才会有cpu资源。
操作系统进入等待态是应用程序主动通过一些操作进入的,需要 系统调用,进入了内核。

PCB(进程控制块)

和进行运行相关的所有信息都在里面,知道进程在内存的哪个位置,运行状态,历史记录……
进程切换时PCB的作用:保存与切换当前状态,实际就是把寄存器的内容存到内存里,然后把内存的另一块内容放到寄存器里,停止当前运行进程并调度其他进程。

多种策略:设置多个寄存器,每种进程切换一个寄存器来实现现场的保存与恢复。

操作系统的进程管理(汇编角度)
一个进程在运行,执行fork()时,把当前进程所有的复制一份,pid不一样。两进程同时继续往下执行,父进程执行下一步是社么,子进程也是一样,此时父进程和子进程是两个独立的进程,访问不同的内存单元。fork返回值有OS决定,虽然两进程一样,给他们的返回值不同,给父进程返回子进程的pid,给子进程pid=0。这里子进程加载了top这个程序,占用了内存空间,这时os让父进程进入等待态,只有子进程退出后,父进程才能到就绪态重新运行。
操作系统的进程管理(汇编角度)
当9012进程执行完后,9011这个父类开始继续执行复制,复制后的进程号为9013,而9012作为父类i的值还可以继续复制,所以9012衍生出了9014。只要i的值满足就可以一直复制。
操作系统的进程管理(汇编角度)
windows下创建新进程的API叫做Create Process 文档 google msdn API
unix linux man查找系统调用

return 返回值 ,告诉操作系统 本次运行返回的状态,约定0表示运行正常,其他值表示返回错误。OS获得返回值没什么用,他实际上可以把返回值 返回给与其相关进程,做逻辑判断、
进程结束后的回收工作,不接受父进程回收的子进程 称作僵尸进程(zombie),占用很多进程不结束。
也可以他杀,linux 中的kill。高级用户有权限可以杀任何进程。

进程间的协作
1.独立
2.协作,有些时候是需要协作的。怎么协作br> 2.1消息传递,通过内核复制,需要系统调用,一个send,一个receive,需要建立通信链路
阻塞性系统调用:请求的结果不能立即得到,当前的进程挂起,等待状态,当I/O结束(请求的事),才被唤醒
非阻塞性系统调用:当你起发起一个请求,操作系统会返回值告诉你操作有无完成,去做其他事(这样的话程序复杂度提高)
消息也有阻塞性和非阻塞性系统调用。消息在操作系统内部有缓冲区。

操作系统的进程管理(汇编角度)事实上,OS不允许两进程互相通信,需要一系列的系统调用;另外还要处理同步问题;并不是所有的OS都支持内存共享
POSIX系统两套系统调用。
通过建立一块共享的空间,一个变量指向它,另一个变量也指向它,只要它修改了,指向它的变量都会修改。

并发软件设计的主要技术路线

1.多进程编程
2.多线程
进程的特点是分离,而线程的特点是不分离,所有属于这个进程的线程共享资源

操作系统的进程管理(汇编角度)
线程库
POsix 线程库
win32 线程库
java:语言级别的线程,有一个线程类
线程池
服务程序一启动,先建几十个线程在线程池,来一个用户程序就去拿一个线程给他,用完再放到线程池中。
linux的线程的实现:同一个系统调用克隆进程和线程,变换克隆函数的参数来区别进程线程,进程间是独立的内存,而线程间则共享内存,没有针对线程的优化。

apache和IIS

apache:多进程,进程是完全独立的,稳定安全
IIS:多线程,效率高,线程模型稳定,任何一个线程出问题,导致整个进程的崩溃。

firefox,chrome,IE

firefox,IE多线程的,网站间的密码是不能获取的(取决于cookie),不同窗口时,百度网的密码不能获取qq邮箱的密码
chrome 在浏览器当中,任何 标签和窗口包括插件都是一个独立的进程,任何一个出问题浏览器不会崩溃。用sandox对操作做了保护,只允许浏览器该干的的事情。

来源:吃数据的猴子

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月8日
下一篇 2020年2月8日

相关推荐