摘要: 照着书上来的 大概理解一下这两个的作用 首先是exit 就是只一个程序执行完毕 然后将返回值存储到pcb中 然后主动调用exit 退出程序 然后由内核去回收页框 emmm 然后是wait wait从字面意思来讲就是等待 父进程通过wait 来将自己阻塞 然后系统会去执行子进程 子进程执行结束后 会将 阅读全文
posted @ 2017-12-18 18:13 菜比170 阅读(747) 评论(0) 推荐(0) 编辑
摘要: fork的实现 首先fork实质上是开了一个新的子进程 同父进程的代码是一样的,但是拥有的地址空间和进程pid号不同 意思是仅有执行的功能相同 书上实现fork的方法首先是给每个进程都增加了一个新属性 就是parent_pid 然后 开始fork()被调用时 会先为fork在内核内存池中分配一页空间 阅读全文
posted @ 2017-12-14 21:15 菜比170 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 翻来覆去看了好多遍的内存管理 还是没有弄明白 先把想明白的记下来好了 首先 是开启分页管理 一共三步 1 准备好页目录表 页表 2 将页目录表的物理地址写入到cr3寄存器中 3 打开cr0的31位 即PG位 先说说准备页目录表和页表 页目录表被放在了低端1MB内存之内 具体位置是0x100000 占 阅读全文
posted @ 2017-12-13 22:34 菜比170 阅读(464) 评论(0) 推荐(0) 编辑
摘要: Linux 文件系统借鉴了inode,inode的结构是 也就是说,在一个分区中 有多少个文件 就有多少个inodes,而一个文件最大,不会超过(12 + 256 + 256 × 256 + 256 × 256 × 256)个数据块大小 同时,目录和普通文件一样,都是一个目录对应一个inode ,如 阅读全文
posted @ 2017-12-02 15:30 菜比170 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 首先区分MBR EBR OBR 图中可以看出 硬盘开头有一个MBR称为主引导扇区 然后是几个主分区,最多是4个主分区。MBR中有个64字节大小的分区表,一共是4个表项 MBR的组成: 446byte的引导程序 64byte的分区表 0x55aa魔数 对硬盘的操作主要是通过两种寄存器,一个通道上的Ma 阅读全文
posted @ 2017-11-28 20:30 菜比170 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 第七章 关于中断 CPU收到中断后 会在中断描述符表中通过中断向量号进行索引(提前为每一种中断分配好中断向量号) 中断向量号通过INTR或NMI引脚传入CPU 中断发生时的压栈 1根据CPL和DPL判断是否发生特权级的变换,将SS_old(用0扩张为16位)和ESP_old压入栈 2压入EFLAGS 阅读全文
posted @ 2017-11-28 10:14 菜比170 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 系统调用的实现思路 1用中断门实现系统调用 用0x80号中断作为系统调用 2在IDT中安装0x80号的中断描述符 并注册相应的中断处理例程 3建立系统调用子功能表syscall_table 利用eax寄存器中的子功能号在该表中索引相应的处理函数 4用宏实现用户空间系统调用接口 _syscall 代码 阅读全文
posted @ 2017-11-15 16:06 菜比170 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 连续很多次出现这个问题,终于想起把这个问题记下来了 这次出现的原因是因为xxxx这个函数用的是static(???)去掉以后就好了…原因我也不太清楚 之前也有几次 基本上是因为 头文件没有添加,或者是makefile中的冒号右边的依赖没写上出现的。 阅读全文
posted @ 2017-11-13 22:13 菜比170 阅读(946) 评论(0) 推荐(0) 编辑
摘要: 操作系统真象还原中,第十一章出现的问题: 怎样编译都会出现一个conflicting types for ’xxx‘的错误 出现这个错误的原因: 头文件声明和定义参数稍有不同 头文件中声明 void Hanlder(const char * buf); 在定义时写作 void Hanlder(cha 阅读全文
posted @ 2017-11-13 22:03 菜比170 阅读(16000) 评论(0) 推荐(0) 编辑