学做饼干网站,网址大全页面设置在哪,wordpress导航栏固定在顶部,新注册公司网站怎么做目录 fork复制进程
逻辑地址和物理地址 fork复制进程 fork 是一个系统调用#xff0c;在 Linux/Unix 系统中用于创建一个新的进程#xff0c;新进程称为子进程。子进程是父进程的副本#xff0c;它从父进程那里继承了大部分属性和资源#xff0c;包括代码、数据、打开的文…目录 fork复制进程
逻辑地址和物理地址 fork复制进程 fork 是一个系统调用在 Linux/Unix 系统中用于创建一个新的进程新进程称为子进程。子进程是父进程的副本它从父进程那里继承了大部分属性和资源包括代码、数据、打开的文件描述符等。
fork 的基本语法如下
#include unistd.hpid_t fork(void);fork是复制进程要把一个已有的进程复制一份在系统中就多出1个进程它是怎么做的 第一步先将父进程原来的这个进程的PCB先复制1份出来然后给它申请一个pid唯一标识这个子进程。原来父进程的pid是5255子进程是5256然后接下来把父进程的实体复制一份给子进程这样系统中就多出这么一个子进程了。 我们执行完fork之后才有的新的PCB节点和子进程的实体子进程执行的代码和父进程是一模一样的父进程做什么子进程就做什么唯一不同的是fork的返回值不同。 在父进程中fork的返回值是子进程的pid值是一个大于0的值在子进程中这个fork的返回值是固定的为0所以说哪个进程的fork的返回值是0这个进程就是子进程因为fork之后虽然父子进程执行的代码是同一套但是有时候我们想让父进程和子进程做不同的事情我们就写个判断“ifpid0)说明子进程在执行这部分的代码 else(也就是pid大于0 我们让父进程执行这部分的代码 #include stdio.h
#include stdlib.h
#include unistd.h
#include string.hint main(){int n 0;char *s NULL;__pid_t pid fork();if(pid-1){exit(0);}if(pid0){s child;n 3;}else{s parent;n 7;}for (int i 0; i n;i){printf(s%s,n%d,n%p,pid%d,ppid%d\n, s,n,n,getpid(),getppid());sleep(1);}exit(0);
} 父子进程用的不是同一块儿空间物理地址变了逻辑地址没变 父子进程用的不是同一块儿空间 在linux操作系统中当你使用 fork 创建一个子进程时操作系统会为子进程分配一块与父进程独立的内存空间。这意味着父进程和子进程不会共享相同的物理内存它们拥有各自独立的内存副本。 物理地址变了逻辑地址没变 物理地址是计算机内存中存储数据的实际位置它可能随着进程的内存分配而改变。逻辑地址是程序中使用的地址通常由操作系统翻译为物理地址。在父子进程的情况下子进程的物理地址通常会与父进程的不同因为它们拥有各自的内存空间。然而逻辑地址通常保持不变因为进程的代码和数据引用的地址仍然相对于它们自己的内存空间。 这种机制使得父子进程能够独立运行而不会互相干扰彼此的内存。虽然它们在逻辑地址上看起来好像共享相同的内存但实际上操作系统在背后进行了地址映射使它们访问的是各自独立的物理内存空间。这有助于确保进程之间的隔离和安全性。 逻辑地址和物理地址 逻辑地址 也称为虚拟地址是程序中使用的地址。它是相对于进程的内存空间而言的通常是一个连续的整数地址。逻辑地址是程序员编写代码时使用的地址但它不直接对应于实际的物理内存位置。逻辑地址提供了一种抽象层使程序员能够编写不受物理内存布局限制的代码。 物理地址 物理地址是计算机内存芯片上的实际存储位置。它对应于计算机的物理硬件包括 RAM随机存储器等。物理地址是实际的存储位置用于在内存芯片上读取和写入数据。计算机硬件通过物理地址来定位存储器中的特定数据。 操作系统的内存管理单元负责将逻辑地址翻译为物理地址。这个过程被称为地址映射。操作系统使用页表等数据结构来管理逻辑地址到物理地址的映射以便确保程序可以访问正确的物理内存位置。逻辑地址和物理地址之间的映射关系是通过操作系统在运行时动态管理的。 总之逻辑地址是程序员在编写代码时使用的虚拟地址而物理地址是实际存储器中的实际位置。操作系统负责将逻辑地址映射到相应的物理地址从而实现内存管理和进程隔离。这种抽象层允许操作系统更有效地管理内存同时保护不同进程之间的隔离。 写在最后以上就是本篇文章的内容了感谢你的阅读。如果感到有所收获的话可以给博主点一个赞哦。如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~