1.进程与线程的区别和联系
答:(1)基本概念
进程,是并发执行的程序在执行过程中分配和管理资源的基本单位。每个进程都有自己的地址空间(即进程空间,其大小只与处理机的位数有关)。进程至少5种状态:初始态,执行态,等待状态,就行状态,终止状态。
线程,是进程的一部分,是CPU调度的一个基本单位。一个没有线程的进程可以被看成单线程的。引入线程的好处:易于调度,提高并发性,开销小,利于充分发挥多处理器的功能。线程只有 3 个基本状态:就绪,执行,阻塞。
(2)二者联系
[1]一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位;
[2]资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量;
[3]处理机分给线程,即真正在处理机上运行的是线程;
[4]线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
(3)重点——二者区别
[1]拥有资源:进程是资源分配的基本单位,而线程不拥有资源只能访问;
[2]调度:新城是独立调度的基本单位,在同一个进程中,线程的切换不会引起进程切换,从一个进程内的线程奇幻到另一个进程中的线程时才会引起进程的切换;
[3] 系统开销:由于创建或者撤销进程时,系统都要为之分配或者回收资源,如内存空间I/O设备等,所付出的开销远大于创建或者撤销线程的开销;
[4]通信方面:进程间通信需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以通过直接读/写同一个数据段(如全局变量)进行通信。
2.进程与程序的区别
答:(1)程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂时的;
(2)程序是静态的观念,进程是动态的观念;
(3)进程具有并发性,而程序没有;
(4)进程是竞争计算机资源的基本单位,程序不是。
(5)进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序。
3.一个进程可以创建多少个线程,和什么有关?
答:理论上,一个进程可用虚拟空间是2G,默认情况下,线程的栈的大小是1MB,所以理论上最多只能创建2048个线程。一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定。
4.一个程序从开始运行到结束的过程
答:(1)预处理:主要读取源程序,对其中伪指令(以#开头的,主要有宏定义,条件编译指令,头文件)和特殊符号进行处理
(2)编译:只进行编译,语法分析;翻译成汇编文件;
(3)汇编:汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。其中UNIX环境中主要有三类目标文件:可重定位文件,共享的目标文件,可执行文件。主要是可重定位文件
(4)链接:主要分为两种:静态链接和动态链接;两种链接的优缺点:[1]静态的链接产生的可执行的文件体积比较的大;而动态链接的可执行文件的体积比较小;[2]动态的链接的编译的效率比较的高;[3]静态链接的可执行的文件执行的效率高;[4]静态链接的可执行的文件的“布局”比较好一点;动态链接更加适合频繁更新的。
5.进程通信方法和线程通信方法(Linux和Windows下)
答:进程通信:Linux进程间通信:管道、信号、消息队列、共享内存、信号量、套接字(socket);Windows进程间通信:管道、消息队列、共享内存、信号量 (semaphore) 、套接字(socket);
线程通信:Linux线程间通信:互斥量(mutex),信号量,条件变量;Windows线程间通信:互斥量(mutex),信号量(semaphore)、临界区(critical section)、事件(event)。