操作系统03 进程与线程
2017-12-09 22:48
225 查看
整型信号量
s 大于0 可用小于0不可用
p操作 wait原语句
v操作 signal
忙等待
保持关门状态 -1
优点:实现简单
原子操作 不允许中断
boot 引导
进程控制块pcb 数据结构 结构体
保存状态 是为了恢复状态
切换回来之后 进程的感觉是没有任何变化 还是占据cpu
这些构成队列
再进程调度的时候涉及队列
就绪队列
设备队列 每一个设备每一个io都有一个队列
进程在不同的队列中迁移
链表实现 因为不停的增删
实际情况 数组是核心
局部性原理
数组好 将局部相关的 放到更快的存储空间访问 提速
时间和空间的浪费由于硬件的提升已经不是问题
一个进程失去CPU的两种情况:
切换到就绪 或者 切换到阻塞
操作系统通过中断不让程序继续运行
最重要的是时钟中断
还有就是程序自己进入等待态 那么一定是进行了系统调用一旦系统调用 那么一定就进入了操作系统内核 操作系统获得控制
开销浪费
调度算法 涉及效率
保存和恢复 基本没有什么可优化的
只要在不同的寄存器切换
shell 资源管理器 去启动进程
形成树
父进程和子进程
子进程啥也没有 需要加载一个程序
复制一份什么都一样 下一步执行生么看寄存器所以下一步执行都是一样的
fork的返回值
如果返回值是0你接收到的是子进程
是1就是父进程
一个程序 一变2
man API Linux 看一个系统调用的用法
which 命令 查找命令在哪
mv 改变一个文件的名字
0 表示一切正常 其他表示有错误
返回值父进程会得到子进程的返回值
做后续工作
父进程给子进程收尸
僵尸进程
init 最根的进程
进程的他杀 kill
kill 进程
父进程杀子进程
进程之间的协作: 独立 协作
信息共享 速度提升 模块化 方便
协作方式 :消息传递 共享内存
同步非问题 不要向同一个地方写数据
容错的问题 写进去一个数 会变
消息传递 阻塞 非阻塞
当你请求一个消息但是并没有得到 那你就被阻塞
非阻塞 请求不能让满足 但是你还可以做后续
消息缓冲区
并发软件
多进程编程 多线程编程
sleep 等待状态
子进程的value不再是父进程的value
独立性 不同的内存
虚拟地址 不是物理地址
打印的每一个变量的地址 是在当前进程内存空间的偏移地址
父进程在前还是子进程在前 是近乎随机的
复制的是当前的父进程的状态
线程特点是不分离
线程比进程要简单 独立寄存器和栈
代码和数据 所以属于同一个进程的线程共享
单线程进程 任意时刻只能执行一条指令
多线程进程的划分 每一个线程占用一个pc
让一个线程里有多条路线 同时发挥作用
尽量的共享
优点:快速的相应能力
窗口画出来 相应这个消息
相应度不好
如果有一个动作是耗时的
立马新建一个线程去做费时的工作 当前线程跟用户交互
资源共享 经济实惠
创建销毁 切换进程开销大于线程
用户级线程 虚拟出来的线程 效率高 都在用户空间 不涉及操作系统 可定制性好 一个线程阻塞全部线程阻塞 操作系统是以操作系统能看得到的线程单位阻塞的 致命的问题
不能在多个处理器上分配
内核级线程
线程池 先创建好
Linux将进程线程 都叫做task
clone() 没有线程的优化 对于操作系统都是进程
本身还是个进程 轻量级的进程
Apache IIS web服务器
Apache 是多进程的模式
IIS 是多线程的实现
线程的会高效一点 本身的特性决定的
进程更稳当 线程更不稳定
线程模型不稳定 一个线程崩溃全部线程崩溃
线程更安全 因为相互独立
浏览器内核
Firefox IE 线程 稳定性差
Chrome 任何一个标签 一个窗口都是一个进程
sandbox 壳
s 大于0 可用小于0不可用
p操作 wait原语句
v操作 signal
忙等待
保持关门状态 -1
优点:实现简单
原子操作 不允许中断
boot 引导
进程控制块pcb 数据结构 结构体
保存状态 是为了恢复状态
切换回来之后 进程的感觉是没有任何变化 还是占据cpu
这些构成队列
再进程调度的时候涉及队列
就绪队列
设备队列 每一个设备每一个io都有一个队列
进程在不同的队列中迁移
链表实现 因为不停的增删
实际情况 数组是核心
局部性原理
数组好 将局部相关的 放到更快的存储空间访问 提速
时间和空间的浪费由于硬件的提升已经不是问题
一个进程失去CPU的两种情况:
切换到就绪 或者 切换到阻塞
操作系统通过中断不让程序继续运行
最重要的是时钟中断
有意思:程序控制着CPU运行 那操作系统怎样不让程序继续运行?
一旦触发中断程序 那么就是操作系统控制CPU还有就是程序自己进入等待态 那么一定是进行了系统调用一旦系统调用 那么一定就进入了操作系统内核 操作系统获得控制
开销浪费
调度算法 涉及效率
保存和恢复 基本没有什么可优化的
软件做不了的 硬件做的了
用很多的寄存器 不计成本的实现状态的保存切换只要在不同的寄存器切换
shell 资源管理器 去启动进程
形成树
父进程和子进程
pstree 可以看到进程树
子进程复制父进程子进程啥也没有 需要加载一个程序
fork创建子进程
Fork() 进程id不一样其他都是一样的且同时进行复制一份什么都一样 下一步执行生么看寄存器所以下一步执行都是一样的
fork的返回值
如果返回值是0你接收到的是子进程
是1就是父进程
一个程序 一变2
top 监视所有进程的状态 每隔1秒刷新
msdn API Google搜索man API Linux 看一个系统调用的用法
which 命令 查找命令在哪
mv 改变一个文件的名字
进程结束: 为什么return 0
没有区别0 表示一切正常 其他表示有错误
返回值父进程会得到子进程的返回值
做后续工作
父进程给子进程收尸
僵尸进程
init 最根的进程
进程的他杀 kill
kill 进程
父进程杀子进程
进程之间的协作: 独立 协作
信息共享 速度提升 模块化 方便
协作方式 :消息传递 共享内存
同步非问题 不要向同一个地方写数据
容错的问题 写进去一个数 会变
消息传递 阻塞 非阻塞
当你请求一个消息但是并没有得到 那你就被阻塞
非阻塞 请求不能让满足 但是你还可以做后续
消息缓冲区
并发软件
多进程编程 多线程编程
sleep 等待状态
子进程的value不再是父进程的value
独立性 不同的内存
虚拟地址 不是物理地址
打印的每一个变量的地址 是在当前进程内存空间的偏移地址
父进程在前还是子进程在前 是近乎随机的
复制的是当前的父进程的状态
#include <stdio.h> #include <unistd.h> int main() { int i; for(i=0;i<3;i++) fork(); sleep(30); }
线程:
进程特点是分离线程特点是不分离
线程比进程要简单 独立寄存器和栈
代码和数据 所以属于同一个进程的线程共享
单线程进程 任意时刻只能执行一条指令
多线程进程的划分 每一个线程占用一个pc
让一个线程里有多条路线 同时发挥作用
尽量的共享
优点:快速的相应能力
窗口画出来 相应这个消息
相应度不好
如果有一个动作是耗时的
立马新建一个线程去做费时的工作 当前线程跟用户交互
资源共享 经济实惠
创建销毁 切换进程开销大于线程
用户级线程 虚拟出来的线程 效率高 都在用户空间 不涉及操作系统 可定制性好 一个线程阻塞全部线程阻塞 操作系统是以操作系统能看得到的线程单位阻塞的 致命的问题
不能在多个处理器上分配
内核级线程
线程池 先创建好
Linux将进程线程 都叫做task
clone() 没有线程的优化 对于操作系统都是进程
本身还是个进程 轻量级的进程
Apache IIS web服务器
Apache 是多进程的模式
IIS 是多线程的实现
线程的会高效一点 本身的特性决定的
进程更稳当 线程更不稳定
线程模型不稳定 一个线程崩溃全部线程崩溃
线程更安全 因为相互独立
浏览器内核
Firefox IE 线程 稳定性差
Chrome 任何一个标签 一个窗口都是一个进程
sandbox 壳
相关文章推荐
- 计算机操作系统之进程与线程
- 读书笔记-----操作系统(进程与线程)
- 【操作系统】 进程与线程
- 以操作系统的角度述说线程与进程
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- 操作系统之进程与线程3——内核级线程及切换(未完成)
- 操作系统中的进程与线程
- 操作系统基本概念-----进程、线程总结
- 操作系统(二):进程和线程管理_3_处理机调度
- 操作系统之进程与线程
- 第二篇. 操作系统之 进程与线程
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- 【转】以操作系统的角度述说线程与进程
- 从操作系统的角度解析线程和进程
- 操作系统进程与线程
- 操作系统 进程管理之进程与线程
- 以操作系统的角度述说线程与进程
- 操作系统中的作业、进程、线程、管程各自的定义
- [操作系统] 进程与线程