标签:exec 网络协议栈 方案 就是 strong 进程间通信 返回 文本文件 整数
系统调用决定了操作系统是否好用,功能是否齐全。
创建进程:fork
原进程叫父进程,新进程叫子进程。
当父进程fork创建子进程时,采用写时拷贝的方案。先是父子共用同一内存,如果有一方要写数据,就会将该内存块进行拷贝。然后再写。
fork可以根据返回值进行对父子进程的区分。
子进程可以使用exec函数族去执行另一个程序。
父进程可以通过waitpid系统调用,通过传入子进程进程号,来让父进程知道子进程的运行状态。
每个进程都有自己独立的内存空间。
该内存空间会放入程序的代码(代码段),程序的数据(数据段)。
(这里牵扯到物理分段分页问题)
在堆分配内存的时候使用的系统调用,brk和mmap。
在Linux下一切皆文件。
每一个文件,Linux都会分配一个文件描述符(一个整数),我们一般通过这个文件描述符来使用系统调用。
程序执行过程中遇到异常等情况就会发生中断,发送信号给进程,进程收到信号后进一步处理。
一般不重要的会忽略,重要的一般都会默认终止。
一般发送的数据不长,可以使用消息队列。消息队列是在内核中。
发送的数据较大,可以使用共享内存。也就是两个进程同时使用一块内存。当然为了解决两个进程同时读写一块内存造成的不确定性问题,引入了信号量。它可以让这部分程序同一时间只有一个进程可以访问。
不同机器之间的通信使用的就是网络通信,遵从网络协议(TCP/IP网络协议栈)。网络服务是通过Socket套接字来提供。
在Linux下有一个开源的标准C库就是Glibc。它不仅提供了丰富的API,还封装了系统调用。
标签:exec 网络协议栈 方案 就是 strong 进程间通信 返回 文本文件 整数
原文地址:https://www.cnblogs.com/LampsAsarum/p/12235000.html