1、进程与线程的区别和联系?
区别:
进程是对运行时程序的封装,是系统进行资源分配和调度的基本单元,而线程是进程的子任务,是CPU分配和调度的基本单元。
一个进程可以有多个线程,但是一个线程只能属于一个进程。
进程的创建需要系统分配内存和CPU,文件句柄等资源,销毁时也要进行相应的回收,所以进程的管理开销很大;但是线程的管理开销则很小。
进程之间不会相互影响;而一个线程崩溃会导致进程的崩溃,从而影响同个进程里面的其他线程。
联系:
线程是存在进程的内部,一个进程中可以有多个进程,一个进程只能存在一个进程中。
2、Linux理论上最多可以创建多少个进程?一个进程可以创建多少线程,和什么有关?
32768. 因为进程的 pid 是用 pid_t 来表示的,pid_t 的最大值是 32768. 所以理论上最多有 32768个进程。
至于线程。进程最多可以创建的线程数是根据分配给调用栈的大小,以及操作系统(32 位和64 位不同)共同决定的。Linux32 位下是 300 多个。
3、进程的执行过程是什么样的,执行一个进程需要做哪些工作?
进程的执行需要经过三大步骤:编译,链接和装入。
编译:将源代码编译成若干模块
链接:将编译后的模块和所需要的库函数进行链接。链接包括三种形式:静态链接,装入时动态链接(将编译后的模块在链接时一边链接一边装入),运行时动态链接(在执行时才把需要的模块进行链接)
装入:将模块装入内存运行,将进程装入内存时,通常使用分页技术,将内存分成固定大小页,进程分为固定大小的块,加载时将进程的块装入页中,并使用页表记录。减少外部碎片。通常操作系统还会使用虚拟内存的技术将磁盘作为内存的扩充。