(1)父进程先于子进程结束,此时子进程成为一个孤儿进程。
(2)Linux系统规定:所有孤儿进程都成为一个特殊进程(进程1,也就是init进程)的子进程。
(1).bss段:存储未初始化的、初始化为0的全局变量和静态变量。
(2).data段:存储初始化不为0的全局变量和静态变量、const型常量。
程序员在程序中用malloc向虚拟内存的堆空间动态申请内存,用free释放内存。如果程序存在大量的malloc/free操作且长时间运行,则虚拟内存的堆空间很容易产生内存碎片
内存碎片是指堆空间剩余很多离散的空闲内存,但不能满足malloc的分配请求。内存碎片分为外部碎片和内部碎片。下图描述了部分堆空间的内存分配情况,将堆空间以4字节为单位划分为许多分配块,白色块表示空闲内存,浅蓝色和深蓝色块表示已分配的内存。假设内存分配的最小单位是一个分配块(4字节)。
栈:由系统自动分配
堆:由程序员手动申请
栈:栈区的内存大小是固定的,只要申请的内存小于栈区剩余的内存,就可以分配成功,否则栈会溢出。
堆:堆区的内存大小是由计算机的虚拟内存决定的,
(1)信号量用于线程同步,互斥锁用于线程互斥。
(2)信号量可以为非负整数,可以实现多个同类资源的多线程同步;互斥锁只能为0/1,只能用于一个资源的互斥访问。
(3)信号量可以由一个线程释放,另一个线程得到;互斥锁的加锁和解锁必须由同一线程分别对应使用,且多个线程使用多个互斥锁必须注意统一顺序,否则可能造成死锁。
什么是死锁?产生死锁的原因是什么?
(1)死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程将无法向前推进。
(2)原因:①系统资源不足。②资源分配不当。③进程推进的顺序不合适。
死锁的四个必要条件是什么?
(1)互斥条件:一个资源每次只能被一个进程使用,其他进程只能等待。
(2)请求与保持条件:进程已经获得至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时该进程被阻塞,但对已获得资源依然保持不放。
(3)不可剥夺条件:进程所获得的资源不能被其他进程剥夺,只能被自己释放。
(4)循环等待条件:若干进程形成首尾相接循环等待资源的关系。
注意:以上四个条件缺一不可。
死锁的处理方法?
(1)预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件。
(2)避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁。
(3)检测和解除死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉。
怎样预防死锁?
(1)破坏“请求与保持条件”:
①静态分配,即每个进程在开始执行时就申请它所需要的全部资源:
②动态分配,即每个进程在申请所需要的资源时它本身不占用系统资源。
(2)破坏“不可剥夺条件”:一个进程在阻塞等待期间,其占有的资源被隐式释放后被其他进程使用,而阻塞等待的资源只有获得所有需要的资源才能重新启动。
(3)破坏“循环等待条件”:采用资源的有序分配,将所有资源进行编号,紧缺的资源采用 比较大的编号,一个进程只有获得较小编号的资源才可以申请较大编号的资源
以上就是操作系统面试高频考点的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号