zoukankan      html  css  js  c++  java
  • 《程序员的自我修养》第三部分小结

    第六章

    可执行文件只有装载到内存以后才能被CPU执行。

    进程:程序运行时的一个过程。

    C 语言指针大小的位数与虚拟空间的位数相同。

    装载方式

    覆盖装入

    程序用到哪个模块就将哪个模块装入,如果不用就在内存不装入,放在磁盘。

    image-20211107214506653

    箭头是依赖关系,互不依赖的模块可以覆盖放置在同一片内存。如果模块没有在内存,需要从磁盘或其他存储器读取,时间换取空间

    页映射

    将内存和磁盘中的数据和指令按照“页(page)”为单位划分。

    image-20211107215141553

    可执行文件的装载

    进程的建立

    1. 创建虚拟地址空间。
    2. 读取可执行文件头,并建立虚拟空间与可执行文件的映射关系。
    3. 将CPU指令寄存器设置成可执行文件入口,启动运行。

    进程虚拟空间的分布

    划分虚拟空间的基本原则是将相同权限属性的、有相同映像文件的映射组成一个VMA。

    image-20211107220312214

    段地址对齐

    页是映射的最小单位,假如操作系统的默认页大小是4096字节,那么在映射一段物理内尺寸和虚拟地址空间的时候,这段内存空间的长度必须是4096的整数倍。

    起始虚拟地址 大小 长度 偏移 权限
    SEG0 0x08048000 0x1000 127 34 r-x
    SEG1 0x08049000 0x3000 9899 164 rw-
    SEG2 0x0804C000 0x1000 1988 r--

    这种对齐方式会造成许多内存碎片。

    解决方式:让各个段接壤部分共享一个物理页面,然后将该物理页面分别映射两次。

    个人理解:数据在物理内存上连续存储,对于同时存储了两个段的物理页做两次映射。

    image-20211107222845929

    // todo

    第七章

    第八章

    第九章

  • 相关阅读:
    reaver 破解wifi
    CDOJ 1255 斓少摘苹果 图论 2016_5_14
    CDOJ 1256 打表+数组 统计
    poj 3190 贪心+优先队列优化
    poj 2376 Cleaning Shifts 贪心 区间问题
    poj 3253 Fence Repair 贪心
    poj 3069 贪心+区间问题
    poj 3050 Hopscotch DFS+暴力搜索+set容器
    poj 2718 Smallest Difference(暴力搜索+STL+DFS)
    poj 3187 Backward Digit Sums
  • 原文地址:https://www.cnblogs.com/weirwei/p/15522138.html
Copyright © 2011-2022 走看看