4T_进程与进程间通信
∮进程
进程与程序
进程与程序是有区别的.刚吃完炸鸡腿,拿出一张餐巾纸,擦完嘴之后,在油乎乎的纸上写下以下文字
#include <stdio.h> void main() { printf("helloworld"); },对这段文字就是程序.你的 Hello.c 就是程序,编译之后的 Hello.out 就是程序.
程序是"静态"的,不争夺CPU 和内存资源.进程是 "动态"的,争夺CPU 和内存资源的"运行起来的程序".
why 进程
一个正在运行的进程,现在要做一些事情,这些事情并不需要CPU 的参与,如 IO 操作.这时 CPU 完全闲置下来了.以前CPU 很贵,这种行为有点 "暴殄天物",现在 CPU 很牛逼,有足够能能力让
计算机 看起来"在同时执行着很多程序".所以进程是 "多道程序设计"这一需求 催生的技术.旨在提高CPU 的利用率,当进程A 不需要CPU 的运算时,让CPU 去解决进程 B的需求.只要切换时间
小于空闲时间,这事就 干的过~ 实际上,随着内存变得越来越大,越来越大 8G 16G 128G...,切换时间就远小于空闲时间.了...
how 切换
什么是进程上下文..每个程序都将内存分为 指令区和数据区指令区存的指令和数据区存的数据就是进程上下文我说的不对~但就是这个意思.
指令执行到哪里了,用一个指针存下来. CPU 寄存器中的数据,存入内存中,并把寄存器指针也存入内存~ 这就是 执行进程切换时 所做的动作.这样一来,被切走的程序也依然
呆在内存中.这些上下文数据,确实在内存中,在内存的什么地方?在内存的一个叫 寄存器保护区,寄存器保护区是什么?是 进程控制块 PCB的一部分.操作系统为每个进程,都保留一块
内存区域,存放PCB,PCB 是一种数据结构,里面存储着,上下文数据和 一些 其他东西...
进程状态
基本的进程状态只有三种,运行态,就绪态,阻塞态.为什么进程要有状态? 是为了方便操作系统进行切换的.
操作系统维护着一个包含就绪态的列表.
当进程等待"外部事件"的执行结果时,操作系统,认为进程进入阻塞态.某种角度,是进程自己阻塞了进程自己.
除此之外进程还有 新生态和停止态.(UNIX like 中的僵尸态)
PCB
PCB 是一种数据结构,维护着每个进程的信息,每个用户进程都有一个PCB,当进程被创建时,PCB 随之创建.进程被销毁时 PCB 随之销毁.当然 PCB的创建和销毁是操作系统的事.
PCB 保存在为操作系统保留的内存中.
PCB 中都有什么...我想画个图,但是画图软件用的不熟.就描述一下就好了.有一个矩形的方框,分成了好多行.
矩形方框的第一行 进程标识符号(pid)
矩形方框的第二行 进程状态(新生,运行,就绪,阻塞,停止)
矩形方框的第三行 进程优先级 (linxu 中的 nice 值)
矩形方框的第四行 寄存器内存保护区(出现了,刚才并没有胡扯,有没有~)
矩形方框的第五行 指向进程内存的指针
矩形方框的第行 指向其他资源的指针
矩形方框的第行 打开文件的列表
矩形方框的第行 统计信息
矩形方框的第几行了? 所需其他信息
矩形方框的第...行 指向其他PCB的指针
进程间的切换本质上是一个查表操作,不再赘述(Achyut Godbole 第190页左右的内容.)
进程间的继承.操作系统允许进程有自己的后代~ (Linux 的 init 进程就是所有进程的父进程.就像 Java 的Object 类一样.这也UNIX作者讽刺Linus说,Linux 跑起来就是像一个超大的 a.out)
操作系统维护着一个单独的指针链表,将构成进程层次结构的PCB 连接在一起. 这个指针链表里存着 指向第一个子进程的PCB 指针,指向最后一个子进程的,指向前一个兄弟目录的,指向后一个兄弟目录的
指向该进程父进程的,这些指针就避免了复杂化,和混淆不清.例如在 手动杀死一个进程时,操作系统就能知道 到底要杀死谁,以及怎么杀死(兄弟姐妹杀不杀,父亲儿子杀不杀...),有的操作系统如果
有儿子就 不让杀,这就是 操作系统自己定的了~
多线程 && why 多线程
一个进程被分配了 26ms时间片,但是 运行到第10ms 的时候,开始进行IO操作,然后这 25ms 的时间片,利用率就 十分有限了~ 这就像和女朋友开了一家星级宾馆,但是改了一夜的bug 一样.
(这货的bug 在脑子里,不在代码里,不好改~)
线程可以在两个不同的层次上实现,用户层和内核层.用户线程到内核线程的三种映射方式为 多对一模型,一对一模型,多对多模型.
POSIX 统一了线程的实现,他对多线程 API 实现了 标准化.可移植操作系统标准.遵循这个标准的线程称为 POSIX 线程或Pthread 线程.C语言的 pthread.h 文件为 多线程的管理提供了60多个函数.
Linux 线程,Linux 并不区分 进程和线程.任务是 Linux 工作的基本单元.Linux 提供了两个系统调用 fork() C标准函数. 和 clone() Linux 特有系统调用.clone() 用来实现 Linux 的内核线程.
用户级可以通过 LinuxThreads 库实现.
∮进程
...
...
...
所以主流解决互斥问题的方案,其实只有 "信号量" 和 "监视器" 两种方案.
4T_进程与进程间通信的更多相关文章
- JAVA线程与线程、进程与进程间通信
I.线程与线程间通信 一.基本概念以及线程与进程之间的区别联系: 关于进程和线程,首先从定义上理解就有所不同1.进程是什么?是具有一定独立功能的程序.它是系统进行资源分配和调度的一个独立单位,重点在系 ...
- python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...
- PHP进程及进程间通信
一.引言 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.换句话说就是,在系统调度多个cpu的时候,一个程序的基本单元.进程对于大多数的语言都不是一个陌生的概念,作为"世界上最好 ...
- python开发进程:互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...
- Qt 进程和线程之一:运行一个进程和进程间通信
Qt提供了对进程和线程的支持.本节讲述了怎样在Qt应用程序中启动一个进程,以及几种常用的进程间通信方法.如果对进程和线程的概念不是很了解,可以看我的另一篇博客:[多进程和多线程的概念. 设计应用程序时 ...
- Python程序中的进程操作-进程间通信(multiprocess.Queue)
目录 一.进程间通信 二.队列 2.1 概念介绍--multiprocess.Queue 2.1.1 方法介绍 2.1.2 其他方法(了解) 三.代码实例--multiprocess.Queue 3. ...
- 【Linux 应用编程】进程管理 - 进程间通信IPC之共享内存 mmap
IPC(InterProcess Communication,进程间通信)是进程中的重要概念.Linux 进程之间常用的通信方式有: 文件:简单,低效,需要代码控制同步 管道:使用简单,默认阻塞 匿名 ...
- 【Linux 应用编程】进程管理 - 进程间通信IPC之管道 pipe 和 FIFO
IPC(InterProcess Communication,进程间通信)是进程中的重要概念.Linux 进程之间常用的通信方式有: 文件:简单,低效,需要代码控制同步 管道:使用简单,默认阻塞 匿名 ...
- Qt ------ QProcess,启动外部进程,进程间通信
简介: 可用于完成启动外部程序,并与之交互通信. 启动一个进程的名字叫“program”,如果某进程的路径没有设置成环境变量,“program”需要包含路径 如果进程可以接收参数,参数叫“argume ...
随机推荐
- js实现光标位置置后
//定位div(contenteditable = "true"),上传图片后,光标移到输入框后面 function po_Last_Div(obj) { if (window.g ...
- handshake_failure
在java 1.6版本中,通过HttpsURLConnection请求class 1(多发生于免费ssl证书,比如沃通或者startssl的)的https网络地址时,可能会报握手异常: Caused ...
- 崽崽帮www.zaizaibang.com精选3
[景山远洋美国交换生随笔]异国他乡的感触 [成都亲子活动]可能是成都最全最好的亲子活动了! 黄平-儿科 @体育活动 下雪天乐翻天之穿越封锁线 北京育翔小学的前世今生 武汉儿科类中医口碑榜 南宁周边农家 ...
- CocoaPods使用详细说明
使用说明: 原文:http://blog.csdn.net/lizhongfu2013/article/details/26384029 http://blog.csdn.net/showhillle ...
- Intellij IDEA +MAVEN+Jetty实现Spring整合Mybatis
1 pom.xml(这里出现transaction错误,是版本的问题) <project xmlns="http://maven.apache.org/POM/4.0.0" ...
- sql:劳务统计各分公司管理费用明细合计(等同汇总报表)
select gl_balance.year, bd_accsubj.dispname, sum(gl_balance.debitamount) 收入, sum(gl_balance.creditam ...
- oracle之synonym小结
oracle中的同义词可以认为是对表.视图.序列.存储过程.函数.程序包或者其他同义词的一个别名,也就是用一个别名来映射的作用. oracle中的同义词可以分为私有和公有两种,私有同义词(privat ...
- js嵌套对象相等比较的一种方法 (原创)
做前端开发经常会遇到比较js对象是否相等的情况, 或者说其它问题往往会归结到这个问题上来:比如对象数组的去重复. 网上看到过很多例子, 但是基本上都是那种比较简单的对象结构, 而复杂的对象结构,比如对 ...
- mfc MemoryAdressRead
内涵图 address
- flash builder (fb) 与flash professional cs6(fla) 联合调试
注意加载的swf名字与项目(fla)名字一致,在fb进行构建,如果fla代码做了修改,保持在fb构建最新.