笔试整理 七

来源:互联网 发布:大型网络手游推荐 编辑:程序博客网 时间:2024/06/08 18:21

1.程序和进程

程序是放到磁盘的可执行文件

进程是指程序执行的实例

2.进程是一个具有独立功能的程序的实例,每个进程都有自己的地址空间和执行状态

每个进程的祖先进程都是init进程,其PID 为 1 ,可以用pstree查看树状关系

3.进程由 程序 数据  进程控制块 组成

4.进程互斥

当有若干个进程都要使用某一 共享资源 时,任何时候最多允许一个进程使用,其他使用该资源的进程必须等待,知道占有者释放该资源。


临界资源:一次只允许一个进程访问的资源称为 临界资源

临界区:进程中访问临界资源的那段代码成为临界区,为实现临界资源的互斥访问,应保证进程互斥的进入各自的临界区。

进程同步:一组并发进程按照一定顺序的执行的过程称为进程同步

进程死锁:多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步

5.进程间通信

管道: 单向的,先进先出的,一个进程在管道尾部写入数据,另一个进程在管道头部读取数据

无名管道用于父进程和子进程之间通信

有名管道用于同一系统中的任意两个进程间通信

共享内存:被多个进程共享的部分物理内存,一个进程向共享内存写入数据,共享这个内存的所有进程都会立刻看到其中内容

信号量:让一个临界区同一时间只有一个进程在访问他

程序对信号量的访问都是原子操作,只对他进行等待(P)和发送(V)信息操作。常见的有二进制信号量

消息队列:一个消息的链表,可以把消息看作一个记录,具有特定的格式

信号通信:信号是Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。

6.线程间通信

线程:是进程之间的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位

线程只拥有一点在运行中必不可少的资源(程序计数器,寄存器,栈),他可以与属于同一进程的其他线程共享拥有的资源。

进程和线程

1.创建一个新的进程必须给他给分配独立的地址空间,建立众多而数据表来维护他的代码段、堆栈段、数据段。

2.运行于一个进程中的多个线程,他们之间使用相同的地址空间,而且线程之间彼此切换时间也远小于进程之间切换所需要的时间

3.对于进程而言,他们需要独立的数据空间,数据传递只能通过进程间通信来传递,比较费时。同一进程下的线程之间贡献数据空间,一个线程的数据可以为其他线程所用。

线程间同步方式:

信号量:二进制信号量和计数信号量

      每次只能被一个线程执行,用二进制信号量(0,1)

允许有限个数目的线程执行,用技计数信号量

互斥锁:访问共享资源前进行上锁,在访问完成后解锁,加锁以后,其他线程都会被阻塞到当前线程释放该锁。

条件变量:线程在等待某些条件满足时进入睡眠,不需要频繁的上锁解锁,效率提高