Skip to content

Latest commit

 

History

History
88 lines (62 loc) · 3.8 KB

readme.md

File metadata and controls

88 lines (62 loc) · 3.8 KB

《给操作系统捋条线》分为了五个大的部分:启动,中断,文件系统,进程,控制台,其他部分比如说内存管理,锁等等都是分散在那五大部分里面。每个部分我都尽量细致到各个方面,并且附有详细的文字描述或者流程图。

《给操作系统捋条线》主要讲述了下面这些问题,看看你是否清楚:

计算机启动: 的计算机启动过程与常见的一些启动过程稍稍不同,主要是 MBR 和 Bootloader 揉在一起了,其他的没什么,比较常规,可能就是多处理器的情况可能大家不太熟悉,这一块大概有这么一些问题:

  • BIOS -> MBR -> Bootloader -> OSinit -> MultiProcessor 启动的大概过程?
  • 实模式如何到保护模式?
  • 如何开启分页机制?
  • 逻辑地址,虚拟地址,线性地址,物理地址如何转化的?
  • 如何读取磁盘加载内核?
  • 多处理器的话又是如何启动的?

中断与系统调用:两者的过程差不太多,只不过一个中断源来源于外部,一个来源内部,在内核部分,两者的处理过程基本一样,这一块儿大概有这些问题:

  • 中断与异常的关系?

  • 什么是软件中断? 软件中断和软中断是一个东西吗?

  • 中断控制器 PIC、APIC 的基本认识?

  • 多个处理器多种中断,哪个处理器处理哪个中断呢?

  • 中断的处理过程

    • 向量号,IDT,中断服务程序(如何定位中断服务程序)?

    • 现场的保存与恢复到底什么意思?

    • 发生中断期间栈是如何变化的?

  • 系统调用大致过程?

  • 系统调用时用户程序的参数如何传递给内核?

文件系统: 将文件系统分为了 7 层,磁盘 -> 缓存 -> 日志 -> 目录 -> 路径 -> 文件描述符,大概有这些问题:

  • 磁盘驱动程序(磁盘如何读写)?
  • 一个简单的日志系统如何设计?
  • 为什么日志系统能够保证数据的一致性?
  • inode,文件,目录,目录项,文件描述符,文件结构体它们之间到底什么关系?
  • 一切皆文件怎么理解,为什么 write,read 这两个系统调用就可以读写任意类型的文件?
  • 目录项,硬链接,软链接到底什么意思,有什么关系?
  • 常见的文件系统调用比如 dup 如何实现的?

进程

  • 如何创建一个进程(fork 实现)?
  • 第一个进程如何创建的?
  • 程序是如何从磁盘加载到内存的(exec 实现)?
  • 一个进程如何被调度上 CPU?
  • 常见的调度算法及其利弊?
  • 进程如何切换(页表,TSS,栈,上下文等是如何变化的)?
  • 进程的休眠唤醒如何实现?
  • 进程的等待退出如何实现?
  • 孤儿进程,僵尸进程什么意思?
  • 程序从 main 开始执行(简单了解了解运行库)?
  • 堆到底是个什么玩意儿?如何实现?如何组织管理?

内存管理:

  • xv6 的物理内存是如何管理的,虚拟内存又是如何管理的?
  • 虚拟地址空间应该如何理解?
  • 地址 0 真的就不能访问?
  • 所谓的分配内存做了些什么事

锁:

  • 自旋锁如何设计?
  • 休眠锁如何设计?
  • 常见死锁判断

控制台:

  • 键盘的简单认识
  • 显卡的简单认识
  • 串口的简单认识
  • 按下一个键到输出到屏幕这之间的详细过程?
  • printf 函数如何实现的
  • 为什么文件描述符 0、1、2 就表示标准输入输出错误呢?
  • shell 如何实现的
  • 重定向什么意思,如何实现?
  • 管道什么意思,如何实现?
  • 一些常用命令如 echo、grep 等等如何实现的?

大概就这些吧,有什么问题还请批评指正,也欢迎大家来同我交流。

微信:icanbehero,更多精彩内容硬核文章尽在公众号:Rand_cs