0
点赞
收藏
分享

微信扫一扫

通过linux0.11学习操作系统原理--Apple的学习笔记

晗韩不普通 2023-10-02 阅读 46

一,前言

最近在断断续续的看linux0.11的源码介绍,主要是了解linux操作系统的原理,之前已经了解了进程的切换主要是cpu上下文切换+虚拟内存切换。今天我主要看了下改开始linux启动的进程0,1,2。

二,分析

先回顾了之前的问题

  1. LDT和GDT的区别?

     GDT用作内核态的代码和数据段,LDT用作用户进程的代码和数据段。

  1. cr3寄存器是干嘛的?

     cr3是页目录的base地址。一般进程切换中对内存切换时候用到。

  1. 不同的线性地址如何映射到相同的物理地址?

     DGT,LDT,cr3等都一样也就是分段+分页都一样,就会通过MMU将虚拟地址转换为相同的物理地址了。

  1. shell是怎么创建的?

一开始0进程就是内核的,初始化了LDT每个进程都是64M,缓冲区用bit图来表示是否已使用。然后加载根文件,fork创建了进程1,是rc用的初始化脚本,然后就是execve来创建/bin/bash也就是主的shell,对于shell不是kernel中的程序,所以除了内存分配外,多了一个文件copy到内存区的动作。

  1. shell中是如何执行命令的?

shell是一个while死循环,然后先get输入命令,然后就是fork一个进程,所以可以通过命令是执行进程。

  1. 关于缺页中断

进程的创建是写时copy,就是通过能找到分段但是找不到分页,就会触发硬件中断,然后再中断中查内存位图,申请free page来添加新的分页,然后压栈,最后中断返回,则变成了新的进程。

三,小结

把我看操作系统原理的一些容易混乱的点进行了记录。

举报

相关推荐

0 条评论