进程与线程:
进程
是一个具有一定独立功能的程序的一次运行活动。
特点:
动态性
并发性
独立性
异步性
状态:
进程ID
(PID):标识进程的唯一数字
父进程的ID(PPID)
启动进程的用户ID(UID)
进程互斥
进程互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个
进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资
源为止。
临界资源
操作系统中将一次只允许一个进程访问的资源称为临界资源。
临界区
进程中访问临界资源的那段程序代码称为临界区。为实现对临界资源的互斥访
问,应保证诸进程互斥地进入各自的临界区。
进程同步
一组并发进程按一定的顺序执行的过程称为进程间的同步。具有同步关系
的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事
件。
进程调度
概念:
按一定算法,从一组待运行的进程
中选出一个来占有CPU运行。
调度方式:
• 抢占式
• 非抢占式
调度算法
先来先服务调度算法
短进程优先调度算法
高优先级优先调度算法
时间片轮转法
死锁
多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进。
线程
线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux。
优点
使用多线程的理由之一是:
和进程相比,它是一种非常“节俭”的多任务操作方式。在Linux系统下,启动一个新的进程
必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。
运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换
所需的时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个
线程开销的30倍左右。
使用多线程的理由之二是:
线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。
除了以上所说的优点外,多线程程序作为一种多任务、并发的工作方式,有如下优点:
使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多
线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。
进程与程序:
程序
是存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。
进程
是一个执行中的程序。它是动态的实体。
进程四要素
- 有一段程序供其执行。这段程序不一定是某个进程所专有,可以与其他进程共用。
- 有进程专用的内核空间堆栈。
- 在内核中有一个task_struct数据结构,即通常所说的“进程控制块”。有了这个数据结
构,进程才能成为内核调度的一个基本单位接受内核的调度。 - 有独立的用户空间。