李治军操作系统 笔记

这篇笔记详细介绍了操作系统的基础知识,包括操作系统概述、引导过程、系统接口和历史。深入探讨了进程与线程,特别是内核级线程的实现,涉及系统调用、线程切换和调度策略。此外,还讲解了内存管理,如分段、分页、多级页表和内存换入换出策略,以及死锁和进程同步的概念。
摘要由CSDN通过智能技术生成

第一篇.操作系统基础

1.1 操作系统概述

1.2 操作系统引导(总体做的:将操作系统读入内存 + 初始化 )

 bootsect.s
 setup.s
      读取硬件参数
      读取system到内存0x00位置
      从16位模式 转到 32位模式,即从实时模式 转到 保护模式, 使得寻址方式发生了改变,跳转到0x00执行system,其实是转到head.s代码
      实时模式: 地址翻译 CS<<4 + IP
      保护模式 :根据CS查表 + IP
 head.s
      初始化GDT,IDT表
      转到main()函数,main()是c函数
 main()
      各种初始化,包括mem_init 标记那些内存块被使用,哪些没有被使用

1.3 系统接口

1.3.1 操作系统接口

由系统提供的函数调用

1.3.2 系统调用的实现

硬件上隔离用户段和内核段,DPL CPL来实现, 其实是把内存分段了,进行隔离保护
从用户段访问内核段,必须通过中断0x80才能访问内核段

库函数write:
1)系统调用号 => %eax
参数1 => %ebx
参数2 => %ecx
参数3 => %edx

2) int 0x80 中断,进入内核,调用 system_call,
int 0x80 和 system_call函数的关系要先注册好 ,即设置IDT表,改变了DPL,以及段寄存器地址,还有偏移地址,实际上就是设置了DPL和中断函数地址 !!!

system_call:
      call _sys_call_table(,%eax,4)           //eax保存的是系统调用号,有查call_table表格
call_table :
                //查找表,通过系统调用号查找对应的系统调用指针,然后去调用对应的sys_write

疑问

有system_call()的函数声明,但是没有实体,只有在.s文件中找到_system_call的标号
就是是_system_call,
c语言中声明和调用的时候都写成system_call
汇编中声明为_system_call,多一个下划线

汇编中调用汇编,则调用_system_call;
汇编中调用c函数,要在c函数前面加一个下划线,、_function;

1.4 操作系统历史

Unix
进程图谱
文件操作

第二篇. 操作系统之 进程与线程

六、 线程引出与实现

L10:用户级线程

进程 和 线程 都是动态概念
进程 = 资源 (包括寄存器值,PCB,内存映射表)+ 指令序列
线程 = 指令序列

线程 的资源是共享的,
进程 间的资源是分隔独立的,内存映射表不同,占用物理内存地址是分隔的

线程 的切换只是切换PC,切换了指令序列
进程 的切换不仅要切换PC,还包括切换资源,即切换内存映射表

用户级线程:调用Yield函数,自己主动让出cpu,内核看不见,内核只能看见所属进程而看不见用户级线程,所以一个用户级线程需要等待,内核会切到别的进程上,不会切到该进程下的其他用户级线程!!!
内核级线程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值