[伴学笔记]02-应用视角的操作系统 [南京大学2024操作系统]


前言

督促自己,同时分享所得,阅读完本篇大约需要10分钟,希望为朋友的技术精进之路尽到绵薄之力.码字不易,望能给个点赞和收藏,以激励笔者源源不断的创作.在此以表谢意,同时因为笔者实力有限,如果发现错误,请及时指正,以免误导后人,谢谢!

jyy: 02-应用视角的操作系统

接下来的学习我们将从三个视角看操作系统:
从程序角度看操作系统就是一堆API和对象
从硬件角度看操作系统就是一个普通的C程序
从数学的视角看操作系统就是一个严格的数学对象

操作系统是连接软件和硬件的桥梁

想要理解操作系统,就要想到第一节{此处附上链接},讲到的要了解什么是软件?

在这里插入图片描述

Everything(二进制程序) = 状态机

程序可以被视作状态机,是因为程序在运行时会经历不同的状态,而这些状态相当于程序执行的不同阶段.

当然程序和状态机还是有一定区别:

​ 程序比状态机更复杂.而且程序也可以包含多个状态机

​ 程序一般是用来处理大量数据,而状态机只处理少量数据

​ 程序可以并发执行多个任务,而状态机通常只能执行一个任务

什么是状态机?

状态机是描述有限数量状态的系统,以及这些状态转换之间的规则

在这里插入图片描述

指令集中没有一条是关闭计算机的指令,那么问题来了,我们平时关闭计算机,切断计算机电源是怎么产生的?

因为退出不是由指令集实现的,而是由操作系统实现的.我们实际上不是通过一条指令就把计算机关掉的,而是因为硬件里面存在一些预设好的另一台小型计算机发送一条指令,这一台小型计算机里面有一个很小的操作系统,这个小型计算机会扫描其所知道的线路,发送电频,将每个模块关掉,最后把整体电源切断.

在这里插入图片描述

在大语言模型时代下,学习东西,最重要的是学会: 如何提问. 学习高质量的prompt, 好的问题会收获更高质量的"知识",只要能提问就一定有所收获,回想我启蒙计算机的路程,也是如此,掌握一门新的语言也是如此,从不知道问什么==> 一肚子疑问,大胆发问后 ==> 再回头发现在灯火阑珊处

操作系统上的应用程序

在这里插入图片描述

在这里插入图片描述

应用程序就相当于 计算机内的计算 + 操作系统的API

在这里插入图片描述

操作系统从应用程序的视角来看,本质就是API

操作系统设计的好,体现在各种应用程序调用这些API时候可以很容易被构造出来,可以很容易和其他程序协作.不好就是所有的程序可以直接控制显存,出现争抢.

理解高级语言程序

binary二进制

C语言代码=>编译成 binary

​ 理解c=>binary的编译就能了解应用程序是怎么来的了

在这里插入图片描述

在这里插入图片描述

如果可以,最好是可以自己实现一个C编译器.真想,没有功利因素在,去钻研技术,用技术实实在在的便利生活,不用什么高新技术,能帮到就好.写于 20240326, 等我存款2000W时候,就开始追求一下.如果真有这一日,一定帮助更多人致富,这是我的愿景之一.

在这里插入图片描述

在这里插入图片描述

Operating System: Three Easy Pieces. 正在写,填坑是必然的.


信息来源:

​ [01-操作系统概述 南京大学2024操作系统]_哔哩哔哩_bilibili

​ 相关学习资料: 操作系统:设计与实现 (2024 春季学期) (jyywiki.cn)

目录 I 基础知识9 1 MINIX操作系统简介11 1.1 MINIX与UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.2 探索MINIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3 编辑器:vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4 编译器:CC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.5 实习题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2 Intel 8086体系结构19 2.1 8086 CPU结构. . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2 运算器与指令部件. . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 寄存器组. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4 主存. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5 堆栈. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.6 系统启动. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.7 二进制文件结构. . . . . . . . . . . . . . . . . . . . . . . . . . 25 3 ACK 8086汇编语言27 3.1 寻址. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2 数据移动指令. . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.3 常量、标号、数据与全局变量. . . . . . . . . . . . . . . . . . 29 3.4 运算指令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5 标志位操纵指令. . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.6 串操作指令. . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.7 跳转、分支与循环. . . . . . . . . . . . . . . . . . . . . . . . 33 3.8 堆栈与子程序. . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5 6 目录 4 实习:Hello World 37 4.1 Hello World程序. . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2 实习题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 II 汇编语言进阶41 5 C与汇编联合开发43 5.1 函数调用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.2 全局与局部变量. . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.3 编译与连接. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.4 实习题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6 中断与I/O 49 6.1 中断. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.2 输入输出设备. . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.3 编写中断处理程序. . . . . . . . . . . . . . . . . . . . . . . . 51 6.4 实习题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 7 实习:小游戏55 7.1 make工具. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7.2 实习题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 III 操作系统内核59 8 进程切换61 8.1 进程模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.2 进程的实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.3 进程切换. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 8.4 中断嵌套. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.5 MiniOS中的进程切换. . . . . . . . . . . . . . . . . . . . . . . 68 8.6 操作系统实现原则. . . . . . . . . . . . . . . . . . . . . . . . 69 9 进程通信71 9.1 信号量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 9.2 消息机制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 9.3 消息机制的实现. . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.4 调试消息内核. . . . . . . . . . . . . . . . . . . . . . . . . . . 78 目录7 10 实习:操作系统内核83 10.1 引导操作系统. . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.2 微内核与层次式操作系统结构. . . . . . . . . . . . . . . . . . 83 10.3 实习题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 IV 轻量操作系统实现87 11 设备驱动程序89 11.1 设备驱动程序原理. . . . . . . . . . . . . . . . . . . . . . . . 89 11.2 键盘设备. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 11.3 屏幕设备. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 11.4 死锁的产生与预防. . . . . . . . . . . . . . . . . . . . . . . . 93 12 存储管理95 12.1 存储管理与系统调用服务进程. . . . . . . . . . . . . . . . . . 95 12.2 进程映像的创建与终止. . . . . . . . . . . . . . . . . . . . . . 97 12.3 替换进程映像. . . . . . . . . . . . . . . . . . . . . . . . . . . 98 13 文件系统101 13.1 文件与目录. . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 13.2 文件与目录管理. . . . . . . . . . . . . . . . . . . . . . . . . . 103 13.3 文件描述符. . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14 实习:迷你操作系统109 14.1 一个简易的Shell . . . . . . . . . . . . . . . . . . . . . . . . . . 109 14.2 实习题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 附录111 A vi常用命令113 B 虚拟机与外部的文件交换117
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值