进程
当一个程序被加载运行时,就会为该程序分配一个进程(记录该程序的运行状态的)
进程包含的内容
这些内容都被放到一个数据结构中了,叫做PCB
PCB
程序段
程序自己的指令(比如:QQ运行起来,会执行自己内部的指令;PCB只是描述程序在内存中的状态的,真正程序运行还是靠执行程序的的指令的)
数据段
存放程序运行过程中产生的数据(比如:变量)
总结
进程是动态的,而进程实体是静态的
进程特性
进程的五态模型
进程控制
进程控制就是实现进程状态的转换,使用原语进行实现【原语使用两个特权指令实现的 - 开/关中断】
进程创建
进程终止
阻塞唤醒
进程切换
进程间通信
因为进程的隔离性,所以引入了进程间通信【多种通信方式本质上都是使用一块能够公共访问的空间】
共享存储
一个进程除了自己的虚拟地址空间外,还会申请一块共享区域【通过增加页表项/段表项,会将共享区域映射到自己独立的虚拟地址空间,然后可以进行访问】,两个进程只要申请的共享区域是同一块区域,就可以进行通信了 - 访问共享区域需要进行互斥访问
消息传递
以Message为单位进行通信,发送/接收Message均由原语进行完成(Message 包含消息头、消息体;头中包含发送方PID,接收方PID,长度等信息)
直接通信
需要指明接收方的PID,指名道姓给谁
简介通信
通过“信箱的方式”进行间接通信
管道通信
一条管道是一个单向通信的道路,管道其实就是一个共享内存区域【循环队列】****
注意:
管道通信与共享内存的区别:
共享内存是申请一块区域,然后随意任何位置进行写入,读取的;而管道通信则是按顺序进行填充
TCP/IP网络通信
线程
线程的出现主要是为了提高程序的并发度,进程在创建的时候向操作系统申请内存空间的操作非常耗时,而引入了线程的话,线程直接向进程索要空间,就提高了效率了
线程的实现方式
用户级线程 - 一对一
优点:用户级线程的切换在用户态即可完成,不需要发生“变态 ”操作,效率高 缺点:一个线程阻塞,整个程序都被阻塞了
内核级线程 - 多对一
优点:一个程序阻塞,不影响其他程序的运行 缺点:需要变态,成本高
多对多
减少了内核级线程个数,减少了变态切换的次数 同时保留了一个内核级线程可以在用户态下进行并发操作(切换着执行多个程序)