From e0e59bb3f5b6f0dd112b2ace100dac35ea3f5d01 Mon Sep 17 00:00:00 2001 From: alu234 <1369741050@qq.com> Date: Mon, 22 Jan 2024 03:12:08 +0800 Subject: [PATCH] update:2 articles --- README.md | 2 ++ ...270\350\277\233\347\250\213\357\274\237.md" | 9 +++++++++ ...210\345\214\272\345\210\253\357\274\237.md" | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 "problems/\344\273\200\344\271\210\346\230\257\345\203\265\345\260\270\350\277\233\347\250\213\357\274\237.md" create mode 100644 "problems/\345\244\226\344\270\255\346\226\255\345\222\214\345\206\205\344\270\255\346\226\255\346\234\211\344\273\200\344\271\210\345\214\272\345\210\253\357\274\237.md" diff --git a/README.md b/README.md index 0e2f58c..e57b3ef 100755 --- a/README.md +++ b/README.md @@ -106,6 +106,8 @@ * [什么是PCB?](./problems/什么是PCB?.md) * [分页和分段的区别是什么?](./problems/分页和分段的区别是什么?.md) * [为什么有了进程还需要线程和协程?](./problems/为什么有了进程还需要线程和协程?.md) +* [外中断和内中断有什么区别?](./problems/外中断和内中断有什么区别?.md) +* [什么是僵尸进程?](./problems/什么是僵尸进程?.md) # linux 服务器 * [32位系统一个进程最多有多少堆内存](./problems/32位系统一个进程最多有多少堆内存.md) diff --git "a/problems/\344\273\200\344\271\210\346\230\257\345\203\265\345\260\270\350\277\233\347\250\213\357\274\237.md" "b/problems/\344\273\200\344\271\210\346\230\257\345\203\265\345\260\270\350\277\233\347\250\213\357\274\237.md" new file mode 100644 index 0000000..c89a503 --- /dev/null +++ "b/problems/\344\273\200\344\271\210\346\230\257\345\203\265\345\260\270\350\277\233\347\250\213\357\274\237.md" @@ -0,0 +1,9 @@ +僵尸进程的产生通常发生在以下情况: + +1. 当一个子进程结束执行后,它会向父进程发送一个SIGCHLD信号,表示它已经执行完毕。 +2. 根据操作系统的设计,父进程需要通过调用`wait()`或`waitpid()`函数来读取子进程的退出状态。这个操作被称为“收割”子进程。 +3. 如果父进程没有调用这些函数,子进程的PCB就不会被清除,从而成为僵尸进程。 + +僵尸进程**本身不消耗除了PCB之外的资源,但如果大量的僵尸进程累积,它们将占用系统的进程表空间,可能会导致系统无法创建新的进程**。通常,僵尸进程是由于程序设计不当导致的,开发者应当确保进程能够被正确地清理。 + +当僵尸进程的父进程终止时,僵尸进程会被操作系统的init进程(或其他类似的系统进程)接管,并由它来完成收割工作,从而释放僵尸进程占用的PCB。在大多数现代操作系统中,这种现象是暂时的,因为系统设计确保了僵尸进程最终会被清理 \ No newline at end of file diff --git "a/problems/\345\244\226\344\270\255\346\226\255\345\222\214\345\206\205\344\270\255\346\226\255\346\234\211\344\273\200\344\271\210\345\214\272\345\210\253\357\274\237.md" "b/problems/\345\244\226\344\270\255\346\226\255\345\222\214\345\206\205\344\270\255\346\226\255\346\234\211\344\273\200\344\271\210\345\214\272\345\210\253\357\274\237.md" new file mode 100644 index 0000000..d312d52 --- /dev/null +++ "b/problems/\345\244\226\344\270\255\346\226\255\345\222\214\345\206\205\344\270\255\346\226\255\346\234\211\344\273\200\344\271\210\345\214\272\345\210\253\357\274\237.md" @@ -0,0 +1,18 @@ +### 外中断 + +- **来源**:外中断通常由处理器外部的事件引起,例如I/O设备(如键盘、鼠标、打印机等)、硬件计时器或其他计算机系统的信号。 +- **异步性**:外中断是异步发生的,它们不是由程序的执行直接引起的,而是由外部硬件事件触发的。 +- **硬件中断**:外中断也被称为硬件中断,因为它们通常涉及硬件设备。 +- **目的**:外中断的主要目的是允许处理器对外设的操作做出响应,如响应用户的输入或处理完成信号。 + +### 内中断 + +- **来源**:内中断通常由程序执行中发生的事件引起,例如除零错误、无效指令、访问越界的内存地址等。 +- **同步性**:内中断是同步发生的,它们是由程序的执行流程中的特定指令或条件触发的。 +- **软件中断**:内中断也被称为软件中断,可以由特定的指令(如x86架构中的`INT`指令)直接调用。 +- **目的**:内中断的主要目的是处理异常情况,如程序错误或特殊的程序控制流程。 + +### 共同点与区分 + +- **中断处理**:无论是外中断还是内中断,在处理器响应时,都会将当前的执行状态保存起来,转而执行一个特定的中断处理例程,处理完毕后再恢复原来的执行状态。 +- **响应方式**:某些内中断(如软件中断)可以被程序员在代码中有意识地触发,而外中断通常是无法预知的,处理器必须随时准备响应。 \ No newline at end of file