随笔分类 - 大学计算机课程
摘要:图9-9简化了一下,每个进程旁边画的“虚拟地址空间”就是页表,蓝色的表示缓存了的虚拟页,白色的表示未分配的或者未缓存的虚拟页 简化链接就是说所有程序的可执行目标文件的内存格式都是相同的(比如代码段的虚拟地址都是从0x400000开始的);结果是CPU在执行任何一个进程的时候,都可以认为进程的内存格式
阅读全文
摘要:目录P561 P561 虚拟内存之所以叫虚拟内存,就是说虚拟内存代表的是磁盘里面的区域,磁盘肯定不是内存(所以是“虚拟的”),但是这块区域通过缓存机制与物理内存相联系,从CPU的角度看,直接通过虚拟地址寻址,最终找到的是物理内存上的一个位置(而不是虚拟内存),但是CPU并不知道物理内存和虚拟内存,他
阅读全文
摘要:目录P533P534 P533 对图中一些支持函数的解释 P534 printf之所以不安全,是因为每个printf在执行的时候都会申请锁(这个样子同一时刻只会有一个printf进行输出),执行完之后会释放锁,只有一个锁;如果main函数里面的printf在执行过程中被一个有printf的信号处理程
阅读全文
摘要:目录P531 P531 这里书上说只会选择一个待处理的信号,但是课程里面是说要处理所有待处理信号 信号也可以看做是一种并发流 发送信号给进程A的时候只是将pending位向量对应的位设置成1,其他的没有变化;然后在内核将控制权从B给A的时候,A就会接收到之前发送的信号,然后调用信号处理程序;但是这里
阅读全文
摘要:目录P529P530 P529 补充一下图8-28 init是最先启动的进程,然后init启动守护进程,接下来可以创建若干个登陆shell(登陆shell可以就理解为普通shell) 再来看看Ctrl+C和Ctrl+Z的例子 forks创建的子进程也属于前台作业,因为forks是由shell在前台作
阅读全文
摘要:来看一个多进程的例子 从第一行可以看出,一共有123个进程,其中5个正在运行 然后下面依次展示了上下文切换的步骤 上面展示的都是单核,如果有多核是一样的
阅读全文
摘要:目录P525 P525 执行execve函数的例子
阅读全文
摘要:再举一个系统调用的例子 这里比书上多了一个e5d80这条指令,这是因为系统调用是有返回值的,我们需要去判断这个返回值和负数的相对大小来判断系统调用是否出现了错误
阅读全文
摘要:目录P541 P541 逐行解释 Signal 函数代码 这段代码是一个自定义的信号处理函数封装,使用了 sigaction 系统调用来设置信号处理程序。下面是逐行解释: handler_t *Signal(int signum, handler_t *handler) 定义了一个名为 Signal
阅读全文
摘要:目录P476P477 P476 使用AR工具的可视化如下 P477 看图7-8,链接器在引用两个静态库的时候,只会把需要的模块链接进来,静态库里面的其他模块不会引入进来
阅读全文
摘要:目录P516P518P519P523操作系统如何实现 execve错误处理总结1. 核心思想:写时复制(Copy-on-Write, COW)与惰性计算2. 实际操作:如何构建新地址空间3. 出错怎么办:优雅地清理4. 成功怎么办:原子性的切换比喻总结 P516 第一个ps就显示了子进程是一个僵尸进
阅读全文
摘要:目录P514P515 P514 这里说的返回两次就是说,现在父进程和子进程有一模一样的代码,假设同时从第3行开始执行,但是父进程执行到第6行的时候,pid是子进程的pid,而子进程执行到第6行的时候,Fork()不会创建新的子进程而是返回0,于是子进程就进入选择分支,父进程不会进入选择分支 注意,子
阅读全文
摘要:一个示例图如下 这里的System ...就是图7-15内核内存里面的东西
阅读全文
摘要:节头目表是 ELF 可重定位目标文件中的一个重要部分。它记录了每个节的相关信息,包括节的类型、大小、文件中的偏移位置等。节头目表实际上就是一个表格,每一项(条目)对应一个节 文件偏移就是文件位置的偏移量,相当于是一个定位信息 节头目表中的每一项就是一个条目,每个条目描述一个节的相关信息(如节的名称、
阅读全文
摘要:目录P481 P481 重定位条目的四个字段由汇编器指示好了,见图7-11 ADDR(.text)就是指令在内存中真正的地址 refaddr就是要修改的指令的起始地址在内存中真正的位置 refptr是可重定位目标文件中要修改的指令的位置,*refptr就是将这个位置修改成对应的内容。比如书上:ref
阅读全文
摘要:要解释第一段,先解释一下图7-11 每个冒号前面的数字计算如下(除了两个重定位条目): 0: 第一条指令起始偏移 4: 第一条指令占4字节,下一条指令偏移为4 9: 第二条指令占5字节,下一条指令偏移为9 e: 第三条指令占5字节,下一条指令偏移为e(十六进制14) 13: 第四条指令占5字节,下一
阅读全文
摘要:目录P474 P474 为啥-0.0不会被强制转换成int呢?因为转换成机器代码是编译器的事情,编译器只能看到当前文件,而当前文件中x是double,所以生成机器代码的时候,-0.0是double类型的二进制表示,而链接器虽然知道x是int,但是链接器能干的事情非常有限,不会去改变已有的机器代码 这
阅读全文
摘要:目录P468P469P470 P468 这里说的本地...变量区别于全局变量,也就是局部变量;不带static的本地变量在栈里面管理,带static的本地变量在.bss或者.data里面管理(虽然这个本地变量带了static,但是还是只能在其所在的作用域里面使用) P469 name是一个整数,所以
阅读全文
摘要:一些符号如下 重定位的意思就是,经过编译器和汇编器生成的可重定位目标文件的指令的起始地址都是0,而链接器就会将其变为内存中的某一个地址,从而可以直接运行
阅读全文

浙公网安备 33010602011771号