摘要:
最近在看深入理解计算机系统,看到一个函数叫做execve(),这个函数很有意思,可以在一个进程插入另外一个进程执行,但是又不像fork()一样产生一个子进程,execve()插入的进程和原进程共享进程号,就好像执行这进程就像执行过程调用一般随意。函数原型如下:int execve(const char *filename, char *const argv[], char *const envp[]);EXAMPLE The following program is designed to be execed by the second program below. It jus... 阅读全文
摘要:
我们知道进程有自己的虚拟地址空间,并且互不干扰,那么进程间通信又如何实现呢?A又看不到B的地址,B又看不到A的地址,那A怎么访问B的东西,B又怎么访问A的东西,我想这应该得借助第三方的东西,我们都知道进程地址空间有一段内核地址,里面是进程由用户态进入内核态时进程运行的内核态环境,比如通过系统调用进入内核态获取内核服务,进程的内核态也有自己内核栈,为什么需要内核栈呢?用户栈难道不就够了吗?因为内核服务很多都是受保护的,比如访问页表,进程控制块这些东西。但是内核栈又和进程间通信有什么相关呢?对于OS所有的进程间通信都是调用系统调用实现的,所有的系统调用都要陷入到内核态去执行。问题:管道是如何实现进 阅读全文