进程—初印象

本文介绍了进程的地址空间虚拟化,强调了虚拟地址与物理地址的区别,解释了进程私有地址空间如何保护内存并简化编程。通过地址转换,每个进程拥有独立的地址空间,即使地址相同,也不会相互影响。此外,文章提到了Unix系统的进程控制,包括获取PID、创建与终止进程、以及使用execve函数加载和运行新程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在有进程地址空间虚拟化概念之前,所有的程序都得实打实的知道自己在物理内存中的分配(程序员手写分配啊!!!)。如果程序小、少,还能凑合着进行管理,但是,面对实际的多程序,大体量程序,不得不将内存的管理与程序的编写进行分离,尽管这样做“有一点1”降低效率。

Using Physical Address:


p23 Using Physical Address

Using Virtual Address:


p25 Using Virtual Address

一、地址虚拟化与进程私有地址空间

进程的地址空间是私有的,名曰:私有地址空间。何为私有,这就与虚拟化有关了。操作系统 将内存地址的概念(虚拟地址)从内存地址的实现(物理地址)中抽象出来了,使得编程工作者可以不用考虑自己编写的代码、变量等数据在终端运行的时候具体位于哪块物理内存地址中。在编写程序时,我们无需关心对物理内存的分配,也不用担心不同的进程对”相同地址值2“操作时是否产生冲突,带来数据的不一致性。

code

 #include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "common.h"

 int
 main(int argc, char *argv[])
{
 int *p = malloc(sizeof(int)); // a1

 assert(p != NULL);

 printf("(%d) memory address of p: %08x\n", getpid(), (unsigned) p); // a2

 *p = 0; // a3

 while (1) {

        Spin(1); //这个函数的作用是1s之后返回
        *p = *p + 1;

        printf("(%d) p: %d\n", getpid(), *p); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值