程序员的自我修养 学习笔记(4)

可执行文件只有装载到内存以后才能被CPU执行。程序就将是菜谱,CPU就像是厨师,计算机的其他硬件就像是厨具,整个炒菜的过程就是一个进程。同样的一份菜谱,不同人可以做出来不同的味道。这个类比真是巧妙。

Linux下面,进程最大使用3G的虚拟空间

Windows下面,进程最大使用2G的虚拟空间

现在计算机,配置超过4G的内存的电脑已经不是不可能了,在这种情况下,32位CPU能够访问到大于4G的空间吗?如果此空间指的是虚拟地址空间,由于32位CPU的指针只能是32位,最大寻址范围是0~4GB。如果此空间指的是实际内存空间,Intel的Pentium
Pro CPU采用36位物理地址,可以访问高达64G的物理内存,这种机制叫做PAE(Physical Address Extension)。

覆盖装入(Overlay):程序员必须手工将程序分割成若干块,然后编写一个小的辅助代码来管理这些模块何时应该驻留内存、何时应该被替换掉。

页映射(Paging):是虚拟存储机制的一部分。

创建一个进程:

1. 创建一个独立的虚拟地址空间

2. 读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系

3. 将CPU的指令寄存器设置成可执行文件的入口地址,启动运行

程序员的自我修养 学习笔记(4),布布扣,bubuko.com

时间: 2024-08-02 06:59:02

程序员的自我修养 学习笔记(4)的相关文章

程序员的自我修养 学习笔记(1)

本文源自在学习<程序员的自我修养>中的心得体会. 对于底层系统程序开发者来说,硬件平台可以抽象为三个主要部件,CPU.内存.I/O控制器. 早期的计算机没有复杂的图形功能,CPU和内存之间的频率差异不大,它们都是连接在同一个bus上面的.其他I/O设备,诸如显示设备.键盘.磁盘等速度比内存.CPU慢很多.为了IO设备与CPU.内存之间的协调通讯,一般每个IO设备商都有相应的IO控制器,早期的硬件结构图如下: 随着技术的进步,CPU的频率越来越高,内存跟不上CPU的速度,他们之间就需要一个转换机

程序员的自我修养学习笔记

------------------------------------------------------------------------ 1.查看各种目标文件的结构和内容 objdump -h SimpleSection.o ------------------------------------------------------------------------ 2.查看ELF文件代码段.数据段.BSS(Block Stated by Symbol)段的长度 size Simple

一、《程序员的自我修养》笔记-前言

引子:在linux上写了三年多的c了,平时遇到一些编译和链接的问题仍然很是头痛,感觉很无力,好基友推荐<程序员的自我修养>,趁着周末,速速围观. 先记录下作者在书中抛出来的问题 1.为啥程序是从main函数开始执行? 2.PE/ELF文件存的是啥? 3.如何写一个直接跑在未安装os裸机上的程序? 4.目标文件是啥?链接是啥? 5.链接为啥报错? 6.句柄到底是啥? 7.普通c/c++代码如何被编译成牧宝文件及程序在目标文件中如何存储? 8.目标文件如何被链接器链接到一起,并形成可执行文件? 9

程序员的自我修养 学习心得(2)

编译和连接:预编译(Prepressing).编译(Compilation).汇编(Assembly).链接(Linking) 预编译过程: 程序员的自我修养 学习心得(2),布布扣,bubuko.com

C++程序员的自我修养–读书笔记

 1:注意不要反回指向栈内存的指针或引用,因为在函数返回时改内存已经被销毁了 2:C/C++没有办法知道指针所指的内存容量大小 当数组作为参数传递时,数组将退化成相同类型的指针 不要指望要指针参数去申请动态内存,因为函数会为产生一个临时变量指向参数的内存,当函数内分配内存时,将内存的地址赋给了临时参数,而没有给实参赋值,所有实参没有发生任何变化,应该修改的是指针所指的内容,而不是修改指针的指向,所有可以用指向指针的指针 3:重载和内联机制既可用于全局函数也可用于类的成员函数,const和vi

程序员的自我修养-读书笔记(2)

3 目标文件里有什么 3.1 目标文件格式 1)可执行文件:PE(Windows)  和 ELF(linux), 都是COFF格式的变种.目标文件(.obj, .o)采用一样的格式. 2)动态链接库:(windows的.dll,linux的.so) 3) 静态链接库:(.lib, .a) 3.2 目标文件是什么样的 1)分成数据段和代码段的好处:1.代码段设为只读,防止误写.2.提高缓存命中率(数据缓存和指令缓存).3.多个进程时,只有一份代码段节约内存. 3.3 挖掘 .o 1) objdum

程序员的自我修养-读书笔记(1)

1. 温故而知新 1.2万变不离其中 三个核心部件:CPU,内存,I/O控制芯片 北桥芯片(PCI 桥):协调CPU,内存,高速图形设备.PCI总线之后又有AGP, PCI express 南桥芯片(ISA 桥):协调USB,键盘,鼠标 1.4 不要让CPU打盹 分时系统:W95, mac os x之前的系统 多任务:unix,linux,win NT 2) Windows中,图形硬件抽象成了GDI, 多媒体设备抽象为DirectX, 磁盘为文件 3)硬盘的基本存储单位为扇区,比如,一个硬盘2个

《程序员的自我修养》第三章学习笔记

1,  编译器编译源代码生成的文件叫做目标文件. 从结构上说,是编译后的可执行文件,只不过还没有经过链接 3.1 目标文件的格式 1,可执行文件的格式: Windows下的PE  和   Linux下的ELF 2,从广义上说,目标文件与可执行文件的格式几乎是一样的,所以广义上可以将目标文件与可执行文件看成是一种类型的文件. 3,可执行文件,动态链接库,静态链接库都按照可执行文件格式存储(Windows下是 PE-COFF格式,Linux下是ELF格式). 4,Linux下命令: $: file 

读书笔记:程序员的自我修养-----第一章(综述)

题前:30--45天读完,一周至少3篇读书笔记.不能坚持,不再联系,不再找你. 一. hello world 程序引出的问题,看40天后,再回来看看自己的答案,提升多少. Q1:程序为什么要被编译器编译之后才可以运行?   A1 : 系统执行的机器语言,即二进制文件,程序是文本文件需要编译之后,由链接器链接需要的基本库生成二进制文件. Q2: 编译器在把C语言程序转换成可以执行的机器码的过程中作了什么,怎么做的?   A2: 预处理,汇编器生成汇编文件,编译器生成目标文件,链接器链接生成可执行文