操作系统 1. 基础 2021-04-04 浏览量 780 暂无评论 操作系统--哈工大李治军 ## 操作系统之基础 打开电源CS=0xFFFF, IP=0x0000 寻址0xFFFF0(ROM BIOS映射区) 检查RAM,键盘,显示器,软硬磁盘 将磁盘0磁道0扇区(引导扇区512字节)读入0x7C00处 设置CS=0x07C0, IP=0x0000 执行bootsect (.s) 将引导0x7C00移动到0x9000:0x0000处 载入setup模块(4个扇区)到0x9000:0x0200处(int 0x13) 获取磁盘数 读光标--显示Loading system 读入system模块(0x1000+0x8000[SYSSIZE, 编译操作系统时设置]) jmpi 0, SETUPSEG 执行setup 取出光标位置(0x90000),扩展内存大小(0x90002) 将system模块移到0地址(所以上面要先将引导扇区移到0x9000:0x0000处) 进入保护模式并跳转至0地址(mov ax, #0x0001 mov cr0, ax jmpi 0, 8) [cr0寄存器最后一位设为1时,进入保护模式,寻址方式发生改变,使用地址翻译(从GDT全局描述符表中选择基址),0时为实模式] 执行system 第一部分代码为head.s(32位汇编代码),利用压栈调用C函数(main.c) 进入main函数(各种初始化) 进入main函数后永不退出,操作系统一直运行 - [x] L1 什么是操作系统 2021-03-17 - [x] L2 开始揭开钢琴的盖子 2021-03-17 - [x] L3 操作系统启动 2021-03-17 - [x] L4 操作系统接口 2021-03-18 系统接口就是提供一些函数来完成系统调用,实现应用程序和操作系统的交流。POSIX标准 - [x] L5 系统调用的实现 2021-03-18 既然应用程序和内核都在内存中,为什么应用程序不能直接访问内存,获取想要的东西,而要通过系统调用?那当然啦,不然岂不是什么都能轻易被人拿去了,密码随便就没了 **那怎么禁止这种乱用(jmp,mov)内核呢?** 使用硬件实现隔离(内核态,用户态),目标特权级(DPL),当前特权级(CPL,CS的最后两位),数字越小,特权越大 硬件也提供了主动进入内核的方法,让系统调用可以进入内核执行,**int 0x80中断指令**,将DPL设为3,进入内核后,CPL置为0 应用程序-->库函数-->系统调用(内嵌汇编,包含int指令,根据编号执行相应指令) **int 0x80:** ``` void sched_init(void) { set_system_gate(0x80, &system_call)} ``` **怎么添加系统调用呢?** 修改kernel/system_calls.s中的系统调用总数nr_system_calls, 在include/linux/sys.h中的sys_call_table添加对应的系统调用函数 新增who.c文件,里面编写sys_iam和sys_whoami,并修改Makefile文件,将who.c添加到内核中 在/usr/include/unistd.h中添加__NR_xxx xx,然后编写iam.c和whoami.c 编译内核,gcc编译iam.c和whoami.c - [x] L6 操作系统历史 IBSYS批处理-->OS360多道程序(多进程,作业之间切换调度)-->MULTICS分时系统(多人)-->UNIX-->Linux 多进程图谱(CPU、内存) 文件操作(IO、磁盘、文件) - [x] L7 我们的任务 赞赏 微信支付 支付宝支付