进程、线程区别?
进程是运行时程序的封装,时系统进行资源分配和调度的基本单位,而线程是进程的子任务,是CPU分配和调度的基本单元。
一个进程可以有多个线程,但是一个线程只能属于一个进程
进程的创建需要系统分配内存和CPU,文件句柄等资源,销毁时也需要进行相应的回收,所以进程的管理开销很大;线程的开销相对来说就很小
进程中之间不会相互影响;而一个线程崩溃就会导致进程崩溃,从而影响同个进程里面的其他进程
联系:进程和线程之间的关系,线程是存在进程的内部,一个进程中可以有多个线程每一个线程只能存在在一个进程中
linux理论上最多可以创建几个进程?一个进程创建多少个线程,和什么有关呢?
32768,因为进程的pid使用pid_t表示,pid_t最大值是32768,所以理论上最多有32768个进程
线程的话,进程最多可以创建的线程数是根据分配给调用栈的大小,以及操作系统(32位与64位)共同决定的,Linux32位下最多是300多个。
进程之间的通信方式有哪几种呢?
进程之间通信的方式主要有六种:管道、信号量、消息队列、信号、共享内存、套接字
进程调度方法详细介绍
先来先服务(FCFS):
短作业进程优先:
最短剩余时间有限
高响应比优化调度:
时间片轮转:
多级反馈队列:
进程执行过程是什么样的?执行一个进程需要u哦哪些工作?
进程的执行需要经过三大步骤:编译,链接和装入
·编译:将源代码编译成托干模块
·链接:将编译后的模块和所需要的库函数进行连接,链接包括三种形式:静态链接,装入时动态链接(将编译后的模块在链接时一边链接一边装入),运行时动态链接(在执行时才把需要的模块进行链接)
·装入:将模块装入内存运行:
将程序装入内存时,通常使用分页技术,将内存分为固定大小的页,进程分为固定大小的块,加载将进程的快装入页中,并使用页表记录,减少外部碎片
通常操作系统会使用虚拟内存的技术将磁盘作为内存的扩充
操作系统的内存管理说一下?
操作系统的内存管理包括物理内存管理和虚拟内存管理
·物理内存管理包括交换和覆盖、分页管理和段页式管理等;
·虚拟内存管理包括虚拟内存的概念,页面置换算法,页面分配策略等;
死锁产生的必要条件:
·互斥:一个资源每次只能被一个进程使用
·占有并请求:一个进程因请求资源而阻塞时,对已经获得的资源保持不放
·不可剥夺:进程已获得的资源,在未使用完之前,不能强行剥夺。
循环等待:若干进程之间形成一种头尾相接的循环等待资源关系。
产生死锁的主要原因是:
·系统资源分配不足
·进程运行推进的顺序不合适
·资源分配不当
死锁的恢复:
·重新启动:最简单的消除死锁的方法,但是代价大。也就是因为如梭采用重新启动来消除死锁的话,之前完成的工作全部被销毁,不仅仅包括死锁的全部进程,也包括未参与死锁的全部进程
·终止进程:终止参与思索地进程并回收他们所站的资源
·一次性全部终止
·逐步终止(优先级,代价函数)
·剥夺资源:剥夺死锁进程所占的部分或者全部资源
·逐步剥夺:一次剥夺死锁进程所占的一个或者一组资源,如果还未解除死锁,那么就进一步释放资源,直到解除死锁为止
·次剥夺:一次性剥夺死锁进程所占用的所有资源
·进程回退:让参与死锁的进程回退到以前没有发生死锁的某个点处,然后由该点继续执行,并希望在进程交叉执行时不再发生死锁,但是程序开销很大。
什么时饥饿?
·饥饿时系统资源分配策略不公引起的,当进程或线程无法访问他所需要的资源而不能继续执行时,就会产生饥饿现象。