CH3
虽然x在rdi中 但是在赋值的时候已经把rdi给rax作为返回值了 第二个问是取他的低位 一定要把寄存器那个图搞明白。
画函数执行栈的情况:
常数100存在于代码段:
CH8 进程
CH8--2信号
进程作业任务
进程与任务或作业管理教材【优质文档】 - 百度文库 (baidu.com)
给进程发信号或者是给进程组发信号:区别 加不加杠 常见的信号如下所示 打在小抄上
ps w//查看进程状态
setgpid//修改进程号
fg//将上一个前台作业拉回来
Ctrl+z跟Ctrl+c的区别_ctrl z 和 ctrl c_绮梦寒宵的博客-CSDN博客
ctrl z是挂起进程 ctrl c是结束进程
命令行解释器会对每个进程进行回收
接受信号的时间
csapp 微壳tinyshell_浮光之海~的博客-CSDN博客
有关execve那点事:
环境变量 比如用户名 操作系统完成 ID是相同的 文件描述符信号上下文是不变的
下条指令运行新程序了 把原来的指令覆盖了 除非出错 否则调用一次不返回 (正常情况)
environ全局变量 envp局部变量可以看成是一个个的指针。
- 结合fork,execve函数,简述在shell中加载和运行hello程序的过程。
- 在shell命令行中输入命令:$./hello
- shell命令行解释器构造argv和envp;
- 调用fork()函数创建子进程,其地址空间与shell父进程完全相同,包括只读代码段、读写数据段、堆及用户栈等
- 调用execve()函数在当前进程(新创建的子进程)的上下文中加载并运行hello程序。将hello中的.text节、.data节、.bss节等内容加载到当前进程的虚拟地址空间
- 调用hello程序的main()函数,hello程序开始在一个进程的上下文中运行。
CH9
缺页中断:
字符串常量“Hello World”在 rodata段(1个页面)、外加代码段(1个页面)、栈段(1个页面),还要用printf等函数(对应需要有共享库的段)...2个以上的页面
core i7地址翻译:
只有最后一级才指向真实的物理地址 L1指向L2的页表条目 L2存的也是编号和起始地址,也指向一个页块也是指向页表条目。从最后一级取出PTE 比如是五位 那么PPN就是2的K次方位。
多级页表的K怎么算?需要用SIZE比上PTE的大小,对于系统而言 页面的大小是确定的,系统一加电就确定下来了,每个PTE的大小由操作系统的变化天生的,所以求出总的数量是2的K次方 所以就需要VPN的位数是七位。