当前位置: 首页 > news >正文

如何做漫画网站ftp网站地图怎么做

如何做漫画网站,ftp网站地图怎么做,男女明星直接做的视频网站,兼职做网站访问量和数据目录 数组的空间分配解析#xff1a; 物理地址和虚拟地址#xff1a; 虚拟地址空间#xff1a; 进程地址空间的本质#xff1a; 为什么要有进程地址空间#xff1f; 页表对进程访问内存的检查#xff1a; 进程地址空间和页表如何关联起来#xff1f; 进程的独立…目录 数组的空间分配解析 物理地址和虚拟地址 虚拟地址空间 进程地址空间的本质 为什么要有进程地址空间 页表对进程访问内存的检查 进程地址空间和页表如何关联起来 进程的独立性如何体现 BSS段从上到下包括未初始化全局数据区、已初始化全局数据区。 堆区向上增长所以在堆区后开辟的空间要比先开辟的空间的地址高。 栈区向下增长和堆区截然相反。 数组的空间分配解析 开辟的数组存储在栈区空间中一次在栈区中从上向下开辟一整块空间。 数组首元素被分配在这块空间的最下端也就是地址最低处之后的数组元素依次向上存放。 这样对数组就能够找到下一个元素(由下向上地址变大)。 对于结构体也是一样先声明的成员所在的地址小于后声明的成员的地址。 对于一个int类型的变量也可以理解为申请4字节大小的空间然后将数据依次从下向上存放。变量的地址就是第一个自己的地址。 物理地址和虚拟地址 int g_val 0; //创建一个全局变量int main() {pid_t id fork();if(id 0){perror(fork);return 0;}else if(id 0) //如果是子进程就将全局变量的值改为100{ g_val100;printf(child[%d]: %d : %p\n, getpid(), g_val, g_val);}else //如果是父进程就直接打印全局变量的值{ sleep(3);printf(parent[%d]: %d : %p\n, getpid(), g_val, g_val);}sleep(1);return 0; } 父子进程操作同一个全局变量所操作的全局变量的地址相同。但是子进程对全局变量的修改并不会影响到父进程打印的全局变量。 可以推断出父子进程操作的不是同一个全局变量基于写时拷贝父子进程会各自保有一份全局变量g_val。 得到结论打印得到的地址并不是物理地址而是虚拟地址。 虚拟地址空间 子进程在创建时通常通过 fork 系统调用会拷贝父进程的地址空间使得子进程拥有与父进程相同的虚拟地址空间。这意味着在父进程和子进程中所有变量的虚拟地址是相同的。 虚拟地址通过页表映射到物理地址。虽然父子进程的虚拟地址空间相同但它们的页表是独立的。最初父子进程的页表中的映射指向相同的物理内存地址这样可以共享内存从而提高效率。 通过页表的不同映射父子进程在内存中的物理地址可以不同。当进程尝试修改某个共享的全局变量或数据时操作系统会触发写时拷贝机制。 写时拷贝机制当父进程或子进程中的某一个试图修改共享的全局变量时操作系统会拷贝该变量所在的物理页帧并为尝试修改的进程创建一个新的物理页。然后操作系统将该新页帧的物理地址更新到该进程的页表中将这个虚拟地址与新物理地址关联起来。这样两个进程依然可以拥有相同的虚拟地址但实际访问的是不同的物理内存保证了数据的一致性和进程间的独立性。 进程地址空间的本质 程序地址空间的本质是操作系统内核管理的一个数据结构它用于描述和管理一个进程所能访问的所有虚拟内存地址。 地址空间中的内存区域通常被划分为多个小块每个小块对应一个特定的用途如代码段、数据段、堆区、栈区等。 这个数据结构的核心是一个或多个结构体这些结构体包含了对每个内存小块的描述信息包括起始地址、结束地址、访问权限如可读、可写、可执行等。 程序地址空间仅仅是对进程虚拟内存的逻辑描述并不是实际的物理内存。它定义了进程在运行时可以访问哪些虚拟地址而实际的物理内存是由操作系统通过页表等机制进行动态映射和管理的。 由此可以理解“ 堆栈相对而生 ”的意义就是不断调整堆栈在进程地址空间的起始结束位置。 为什么要有进程地址空间 进程地址空间通过页表管理加载到内存中的进程及其数据。页表负责将进程的虚拟地址映射到物理内存地址从而实现对进程的内存管理。 因此进程控制块PCB无需直接关心进程及其数据在物理内存中的具体位置。页表的存在使得PCB只需关注虚拟地址和相关的状态信息而不必追踪数据在物理内存中的具体布局。 这种机制赋予了进程一个统一的视角来管理和访问内存通过将无序的物理内存映射为有序的虚拟地址空间操作系统为每个进程提供了一个一致且线性的内存视图。 进程及其数据可以在物理内存中灵活加载无需担心具体的加载顺序。由于页表的动态映射操作系统可以根据需要在任何空闲的物理内存位置加载进程和数据而虚拟地址空间的连续性和有序性则由页表负责保证。 页表对进程访问内存的检查 页表不仅包含虚拟地址到物理地址的映射还包含对该映射的访问权限字段。这些权限字段通常包括可读、可写、可执行等属性用来控制进程对内存的访问权限。 当进程试图通过地址空间访问内存时操作系统会通过页表来检查该访问请求是否符合权限要求。如果请求的地址超出合法范围即非法地址或访问权限不符合页表中的规定操作系统会在虚拟地址转化为物理地址的过程中拦截该访问。 这种机制为内存访问提供了安全保障。当进程试图执行非法操作时例如读取未授权的内存区域或执行不可执行的代码段操作系统会触发一个保护机制如产生一个页面错误异常并采取相应的措施如终止进程或发出警告。 因此可以理解为什么在字符常量区的常量不能被修改字符常量区通常位于代码段或专门的常量区中的常量在加载到内存时操作系统会通过页表将这一段的访问权限设置为只读。使得任何试图修改这些常量的操作都会被操作系统拦截并通常会导致程序崩溃或产生异常。 进程地址空间和页表如何关联起来 CPU通过页表基址寄存器CR3寄存器直接找到页表进行地址映射。CR3寄存器中存储的是当前进程页表的物理地址而不是虚拟地址。通过这个物理地址CPU可以快速访问页表从而将虚拟地址转换为实际的物理地址。 每个进程都有自己独立的页表用于管理该进程的虚拟地址空间。页表在进程的上下文中被保存当操作系统调度器将进程切换到CPU上执行时它会从该进程的上下文中读取页表地址并将其加载到CR3寄存器中。 在进程切换时当前进程的页表地址会被保存到它的上下文中随后新的进程被加载时其页表地址会被从其上下文中恢复并加载到CR3寄存器中。这种机制确保了不同进程在运行时可以独立地管理和访问各自的内存空间而不互相干扰。 进程的独立性如何体现 每个进程都有自己独立的关键数据结构包括进程控制块PCB、进程地址空间、页表以及分配给该进程的物理内存。这些数据结构在操作系统中被严格隔离确保进程之间的独立性。 当一个进程崩溃时由于操作系统对进程的隔离管理这种崩溃通常只会影响到该进程自身的数据结构如其PCB、地址空间和与其相关联的物理内存。其他进程的执行和数据不会受到影响。
http://www.hkea.cn/news/14584889/

相关文章:

  • 做论坛和做网站有什么区别中国建设银行网站用户
  • 在淘宝上的毕设网站代做如何用花生壳做网站
  • 三明市住房与城乡建设部网站北京网站设计公司jq成都柚米科技15
  • 网站站点结构图怎么搭建购物网站
  • 网站下载链接打不开天津网站快速排名提升
  • 上海网站建设高端wordpress文章固定格式
  • 网站建设 海南python建设电子商务网站
  • 手机网站用什么空间一起做单网站怎么样
  • 找兼职做酒店网站深圳网站建设深圳
  • php做的卖水果网站杭州seo网站推广排名
  • 公司网站建设 意义个人工作室怎么注册营业执照
  • 网站建设教程aspwordpress admin plugin
  • 响水县住房和城乡建设局网站网站做营利性广告需要什么备案
  • 提供微网站制作电话wordpress做的著名网站
  • 网站关键词布局图jquery做背景的网站赏析
  • 免费做销售网站有哪些站长工具seo推广
  • 怎么优化网站排名微信推广平台怎么做
  • 庆阳做网站p2p网站设计
  • 网站内怎么做链接凡科互动怎么发布
  • 免费建网站那个好可以访问国外网站的dns
  • 外贸网站 自建网站被k是什么意思
  • 高校网站集群平台子站开发门户网站通俗理解
  • 佛山外贸建站公司沧州建设网站公司
  • 基于wordpress个人博客网站论文企业黄页大全
  • 网站设计西安学习外贸网站搭建一站式服务
  • 建设公司的网站制作永乐网站建设
  • 凡科建站可以做几个网站建设银行个人官方网站
  • 商城类网站价格看广告赚钱
  • 木门行业网站该怎么做娄底网站建设网站
  • 去哪找做网站的人自己做头像的软件