[操作系统] 进程和线程

来源:互联网 发布:按键精灵压枪脚本源码 编辑:程序博客网 时间:2024/05/03 10:00

看到百度面试题有道进程和线程的区别,什么是线程安全?于是就想借此机会把进程线程的知识扫了。

一、进程基本概念

1. OS引入进程的概念是为了支持程序的并发执行(在未配置OS的系统中,程序是顺序执行的)。

2. 创建进程及进程控制块PCB

PCB记录了OS所需的、用于描述进程的当前情况及控制进程运行的全部信息[1]。这是教科书版的概念。

当系统创建一个新进程时,就为它建立了一个PCB,进程结束后又回收其PCB,进程于是随之消亡。Windows用CreateProcess创建进程,创建进程后,系统将创建一个进程内核对象(PCB)。然后系统为新进程创建一个线程内核对象。这个主线程执行c /c++运行时启动例程,它由链接器设为应用程序入口,最终调用WinMain或main。。然后系统为新进程创建一个线程内核对象。这个主线程执行c /c++运行时启动例程,它由链接器设为应用程序入口,最终调用WinMain或main。

PCB常被访问,于是常驻内存,系统将所有的PCB组织成若干个链表(或队列),存放在操作系统中专门开辟的PCB区。

PCB中有如下一些信息:

(1)进程标识符;

(2)处理机状态;

实际上是寄存器的信息:通用寄存器,指令寄存器,程序状态字PSW,用户栈指针。

(3)进程调试信息;

(4)进程控制信息。

二、进程的同步

首先区别进程同步和线程同步,线程是进程的更小的CPU分配单位,所以在某种意义上,进程同步与线程同步是一回事(除当同步线程在同一进程中)。

1. 互斥量;

2. 信息量;

利用PV原子操作操作临界资源S。wait使S=S-1,signal使S=S+1。信号使用不当会导致死锁。

三、进程间通信

实际上,进程的同步是“低级”的进程间通信,因为交换的数据少。

1. 共享存储器系统

2. 消息传递系统

3. 管道系统

4. Windows下的同步

Windows下可以使用共享内存,命名管道,WinSock,Mailslot通信,也可以使用COM/DCOM/RPC。

(1)共享内存

Windows下使用共享内存涉及到的Win32 API:

CreateFileMapping();MapViewOfFile();UnMapViewOfFile();CloseHandle();



四、线程的基本概念

为什么要引入线程呢?由于系统在创建进程时,必须为它为本除处理机外的所有资源,故而进程的创建,撤消及切换都需较大代价。于是,提出线程,作为更小的实体。


参考:

1. 《计算机操作系统》

2. http://www.codeproject.com/Articles/13724/Windows-IPC