| #include <stidio.h> |
| |
| void is_primes(int fd_father[2]){ |
| int fd_child[2]; |
| pipe(fd_child); |
| |
| |
| int p = 0; |
| read(fd_father[0], &p, sizeof(p)); |
| printf("prime %d\n", p); |
| |
| int n; |
| int left = 0; |
| while(read(fd_father[0], &n, sizeof(p)) != 0) { |
| if(n % p != 0) { |
| write(fd_child[1], &n, sizeof(n)); |
| left++; |
| } |
| } |
| close(fd_father[0]); |
| close(fd_child[1]); |
| if(left == 0){ |
| exit(0); |
| } |
| |
| |
| if(fork() == 0){ |
| is_primes(fd_child); |
| } |
| wait(0); |
| } |
| |
| int main(int argc, char** atgv) { |
| int fd_child[2]; |
| pipe(fd_child); |
| |
| |
| |
| 操作系统管理硬件。进程(处理器,主存,i/o设备),虚拟内存(主存,i/o设备),文件(i/o设备)。 |
| |
| 并发运行:一个进程的指令和另一个进程的指令交错执行。这种交错执行的机制叫上下文切换,进程间切换由内核管理。 |
| |
| 上下文:操作系统保持跟踪进程运行所需的所有状态信息。 |
| |
| 内核:操作系统代码常驻主存的一部分,不是独立的进程。是系统全部进程所用代码和数据结构的集合。 |
| |
| 栈位于用户虚拟地址空间顶部,编译器用它来实现函数调用,和堆一样,用户栈在程序执行期间可以动态地扩展和收缩 。 调用函数时,栈会增长;从一个函数返回时,栈会收缩 。 |
| |
| 内核虚拟内存:程序无法读写,或调用内核代码定义的函数,需要调用内核来执行操作。 |
| |
| <img title="" src="file:///home/yuanye/图片/2022-10-06%2017-25-26%20的屏幕截图.png" alt="2022-10-06 17-25-26 的屏幕截图.png" width="309" data-align="center"> |
| |
| PC:程序计数器(寄存器),ALU(算数/逻辑单元) |
| for(int i = 2; i <= 35; i++){ |
| write(fd_child[1], &i, sizeof(i)); |
| } |
| close(fd_child[1]); |
| |
| |
| if(fork() == 0) { |
| is_primes(fd_child); |
| } |
| wait(0); |
| exit(0); |
| } |