【操作系统OS】学习笔记:第一章 操作系统基础【哈工大李治军老师】

news2025/1/12 4:08:46

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记,仅进行交流分享。

特此鸣谢李治军老师,操作系统的神作!

如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡>𖥦<)!!

主页专栏有更多,如有疑问欢迎大家指正讨论,共同进步!

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ  

第一章    操作系统基础 

更多操作系统笔记:【哈工大李治军老师】操作系统笔记专栏汇总

目录

课程链接:

一、什么是操作系统

 1.操作系统的引入

 2.什么是操作系统?

 3.操作系统课 我们要学什么?

二、开始揭开钢琴的盖子

1.从打开电源开始...

2.计算机怎么工作?

计算机核心结构: 

3.打开电源,计算机执行的第一句指令什么?

引导扇区BootSect.s

三、操作系统启动

1.set up模块

2.进入保护模式

3.GDT

4.jmpi 0,8

5.system模块

head.s

四、操作系统接口

1.什么是操作系统接口?

2.命令行:

3.图形按钮

4.接口表现:函数调用 

        操作系统接口——系统调用

五、系统调用的实现 

区分内核态和用户态

特权级检查: 

中断指令int

系统调用的实现

中断处理程序:system_call 

六、操作系统历史

操作系统的核心图像:多进程切换、文件操作 

​         操作系统学习任务


课程链接:

b站:

【哈工大】操作系统 李治军(全32讲)icon-default.png?t=N3I4https://www.bilibili.com/video/BV19r4y1b7Aw/?share_source=copy_web&vd_source=6605d3cd5f58ef0c4e5ae59875ef0dda

 中国大学MOOC:

大学慕课—操作系统—主讲:哈工大李治军icon-default.png?t=N3I4https://www.icourse163.org/course/HIT-1002531008?from=searchPage&outVendor=zw_mooc_pcssjg_

 

一、什么是操作系统

1.操作系统的引入

用一句话说一说计算机专业要干什么?

用计算机帮助人们解决一些实际问题

通过内存地址输出到现存地址,通过控制器等过程才能输出“hello”

这种使用计算机的方式太麻烦!利用操作系统就可以跳过计算机硬件,更直接、更简单、高效地通过应用软件操作计算机。

直接使用  printf 就可以输出hello:

 2.什么是操作系统?

是计算机硬件和应用之间的一层软件

方便我们使用硬件,如使用显存..
高效的使用硬件,如开多个终端(窗口)

管理哪些硬件

3.操作系统课 我们要学什么?

学习操作系统可以有很多层次

从应用软件出发“探到操作系统”

集中在使用计算机的接口上
使用显示器:printf;    使用CPU:fork,   使用文件:open、read...

 从应用软件出发“进入操作系统”

一段文字是如何写到磁盘上的...

从硬件出发“设计并实现操作系统”

给你一个板子,配一个操作系统...

课程目标:

 

 动手实践一个真实的操作系统

二、开始揭开钢琴的盖子

1.从打开电源开始...

这神秘的黑色背后发生着什么?..

不要总等着别人告诉你答案,尽量自己去寻找...

从知识和常识出发进行思索...
打开电源--->计算机要开始工作了
计算机怎么工作? 这是我们最最基本,也最最重要的常识....

  

2.计算机怎么工作?

说到底就是一个计算模型。

核心:设置控制器动作

从通用图灵机到计算机

又一个伟大的发明:冯·诺依曼存储程序思想  1946年提出
存储程序的主要思想:将程序和数据存放到计算机内部的存储器中,计算机在程序的控制下一步一步进行处理
计算机由五大部件组成:输入设备、输出设备、存储器、运算器、控制器

计算机核心结构: 

首先把程序放到存储器(内存)中,然后用一个指针(IP)指向它,进行自动取址执行,产生结果。

 

取址执行!!!

3.打开电源,计算机执行的第一句指令什么?

引导扇区BootSect.s

0x7c00处存放的代码就是从磁盘引导扇区读入的那512个字节。

引导扇区就是启动设备的第一个扇区。

硬盘的第一个扇区上存放着开机后执行的第一段我们可以控制的程序。

注:需要汇编语言基础,C语言内存不可控,汇编直接对应机器码,是完全可控的。操作系统正需要完全可控的汇编语言。

将内存中 0x7C00 处的 512 个字节(正好就是全部 bootsect.s)移动到内存地址 0x90000 开始的一段内存中

这段汇编文件将来就会编译成机器指令,然后机器指令放在引导扇区上。

bootsect.s 的最后,PC指针被设置为 0x90200,执行指令 “int 0x13”,跳转到setup程序开始处(即0x90200)执行setup程序。

读入setup模块后:ok_load_setup

读入system模块,Loading system将会被显示出来

三、操作系统启动

引导扇区BootSect.s 分段读入操作系统的代码,首先读入set up,然后在屏幕上打出了一个 logo:Loading system...

调用13号中断,读入后面的system部分,然后进行set up

根据名字就可以想到:setup将完成OS启动前的设置

1.set up模块

关键:int 0x15

获得物理内存大小:将获取到的值放在ax中,ax再赋给[ 2 ] 

段寄存器9000左移4位再加2:0x90002扩展内存数        读入内存大小并保存(因为操作系统要管理内存)

do move:将整个操作系统system模块,移动到0地址处。  从0地址开始一直是操作系统

2.进入保护模式

jmpi 0,8 :把0赋给IP 8赋给CS

通过段基址+段内偏移的方式完成寻址:PC=CS<<4+IP 跳转到80地址,这个地址是非法的,在这里寻址方式发生了改变!

新的寻址方式:      (从16位机切换到32位机扩大内存)32位模式也叫保护模式

寄存器:cr0

cr0寄存器的最后一位如果是0就是16位模式,如果是1就是保护模式。

  

setup.s 寄存器cr0最后一位设置为1,cpu会执行另外一条的解释执行指令的电路,内存寻址方式会改变为保护模式。

3.GDT

CS不再是左移四位产生一个地址,而是CS(选择子),里面存放的是查表的下标(索引),真正的地址放在表项中。

jmpi 0,8 是选择表中的基址,再和IP偏移加在一起产生32位地址。

set up初始化GDT表(全局描述符):

4.jmpi 0,8

PC=GDT[8]+0=0,PC指针跳转到 0x0地址处

 

setup.s 到此执行完成,然后开始执行 system 模块

5.system模块

system模块(目标代码)中的第一部分代码?         head.s

system由许多文件编译而成,为什么是head.s?

编写操作系统:Makefile  编译后的操作系统镜像:Image

head.s

head.s的汇编语法:

进入main函数:

main的工作就是xx_init: 内存、中断、设备时钟、CPU等内容的初始化....

三个参数分别是envp,argv,argc

但此处main并没使用此处的main只保留传统main的形式和命名

四、操作系统接口

1.什么是操作系统接口?

        接口:连接两个东西、信号转换、屏蔽细节...

操作系统接口:连接上层用户和操作系统软件

2.命令行:

命令对应程序!!!        通过它输入相应的指令来完成一些特定的操作。

3.图形按钮

在图形用户界面(GUI)中,通常使用各种图形按钮来实现不同的操作。

4.接口表现:函数调用 

 

操作系统接口——系统调用

由于程序无法直接访问硬件资源和操作系统内核,因此需要通过系统调用来请求操作系统完成相关任务。这些函数允许应用程序请求操作系统完成特定的任务,例如读取文件、向设备发送数据、创建进程等,通常被封装在系统库中。

系统调用举例: 

文件操作:打开、读取、写入文件
进程控制:创建、运行和销毁进程
内存管理:分配、释放内存
设备控制:连接、读写设备

五、系统调用的实现 

实现一个whoami系统调用

进入内核思想      应用程序不能直接进入内核调用函数!!不能随意jmp、move!         系统调用就是提供了一种调用手段

区分内核态和用户态

内核态可以访问任何数据,用户态不能访问内核数据

对于指令跳转也一样实现了隔离...

CPL是当前特权级,是 CPU 在执行代码时的特权级别

DPL是描述符特权级,指的是某个段描述符所代表的内存段允许访问的最高特权级别。 

CPL 分为四种级别:Ring 0~3,数字越小级别越高,也就是特权级越高

Ring 0 表示内核态特权级,被操作系统内核使用

Ring 1~3 表示用户态特权级,被应用程序使用

特权级检查: 

操作系统内核拥有自己的代码段和数据段,特权级别通常为 Ring 0,因此对应的段描述符的 DPL 值也应该设为 0,这样才能确保只有内核态特权级别才能访问这些段。

当 CPU 执行代码时,会根据指令所在段的 DPL 值与当前 CPL 值进行比较,如果 CPL 比 DPL 高,则不能访问该段;如果 CPL 比 DPL 低或相等,则可以访问该段。

中断指令int

中断指令int是用于触发 CPU 中断处理程序的机器指令。 

在进行中断时,CPU 会自动进入内核态,因此可以访问操作系统内核提供的所有资源和服务

系统调用的实现

将一个系统调用号置给ex 然后调用int 0x80然后进入内核。

因为int 0x80是用户程序发起的调用内核代码的唯一方式.

int 0x80中断的处理

set_system_gate用来设置0x80的中断处理 

然后现在的cs就是内核态的,就可以通过现在的cs查表得到段基址加上ip去执行内核里的中断处理程序了

中断处理程序:system_call 

system_call 从中断堆栈中获取系统调用号和参数并执行对应的系统调用处理例程。

 _sys_call table函数指针数组

六、操作系统历史

操作系统的核心图像:多进程切换、文件操作 

 
操作系统学习任务

更多操作系统笔记:【哈工大李治军老师】操作系统笔记专栏汇总

大家的点赞、收藏、关注将是我更新的最大动力!欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端知识】Cookie, Session,Token和JWT的发展及区别(中)

【前端知识】Cookie, Session&#xff0c;Token和JWT的发展及区别&#xff08;中&#xff09; 4. Session4.1 Session的背景及定义4.2 Session的特点&#x1f44d;4.2.1 Session的特点&#x1f440;4.2.2 Session保存的位置 4.3 Session的一些重要/常用属性4.4 Session的认证流…

算法之美~分治算法

如何理解分治算法&#xff1f; 分治算法&#xff08;divide and conquer&#xff09;的核心思想其实是&#xff0c;分而治之&#xff0c;也就是将原问题划分成n个规模较小&#xff0c;并且结构与原问题相似的子问题&#xff0c;递归第解决这些子问题&#xff0c;然后再合并其结…

什么是 Docker?它能用来做什么?

文章目录 什么是云计算&#xff1f;什么是 Docker&#xff1f;虚拟化技术演变特点架构镜像&#xff08;Image&#xff09;仓库&#xff08;Registry &#xff09;容器&#xff08;Container&#xff09; 应用场景 什么是云计算&#xff1f; 云计算是一种资源的服务模式&#x…

应急响应概述

一、应急响应事件类型 常见的应急响应事件分类&#xff1a; Web 入侵&#xff1a;主页篡改、Webshell 系统入侵&#xff1a;病毒木马、勒索软件、远控后门 网络攻击&#xff1a;DDOS 攻击、DNS 劫持、ARP 欺骗 二、可疑账号排查 2.1Windows 1&#xff09;‘WinR’…

世界坐标系、相机坐标系和图像坐标系的转换

本文转载于&#xff1a;https://blog.csdn.net/weixin_38842821/article/details/125933604?spm1001.2014.3001.5506 1. 世界坐标 世界坐标系是一个特殊坐标系&#xff0c;它建立了描述其他坐标系需要的参考框架。能够用世界坐标系描述其他坐标系的位置&#xff0c;而不能用更…

stack、queue和priority_queue的使用介绍--C++

一、stack介绍 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&#xff0c;并提供一组…

YOLOv5 更换Neck之 BiFPN:如何替换YOLOv5的Neck实现更强的检测能力?

目录 一、BiFPN是什么&#xff1f;1、什么是BiFPN2、BiFPN的优势 二、为什么要用BiFPN替换YOLOv5的Neck&#xff1f;1、YOLOv5原有的Neck存在的问题2、BiFPN的适用场景 三、如何在YOLOv5中实现BiFPN1、下载并替换BiFPN代码2、修改配置文件3、遇到的问题及解决方法 四、BiFPN超参…

IronOCR 2023.4.13 Crack

IronOCR能够允许用户软件工程师直接从图片中读取文本文章&#xff0c;以及从.NET的程序和互联网网站中读取PDF。从扫描的图像中读取文本和条形码&#xff0c;能够支持多种外语&#xff0c;并且输出为纯文本甚至信息结构。IronOCR库能够供用户在互联网游戏控制台中使用。MVC&…

PyQt6: 多网卡适配器的选择与显示(GPT4帮写)

PyQt6: 多网卡适配器的选择与显示 1. 背景2. Python获取本机网卡适配器信息3. PyQT6 UI显示网卡信息4. PyQT6 后台处理&#xff1a;ButtonComboBox 附&#xff1a;GPT Output&#xff1a;博主热门文章推荐&#xff1a; &#xff08;本文部分文案由ChatGPT生成&#xff0c;但代码…

企企通:为什么成长型企业,需要SaaS采购管理平台?

根据艾瑞咨询发布的《2022年中国企业级SaaS行业研究报告》&#xff0c;未来三年SaaS行业的增长也将与宏观经济恢复速度相挂钩&#xff0c;在中性预期下&#xff0c;到2024年中国企业级SaaS市场规模将有望达到1201亿元。 由于SaaS和云模式出现&#xff0c;采购角色在慢慢发生了变…

perf record对C++程序耗时进行分析

本节将介绍如何使用perf工具的perf record对C代码进行性能分析&#xff0c;一切操作都是在ubuntu 20下进行。 perf工具安装 由于perf工具和内核版本有关&#xff0c;因此直接安装容易出错&#xff0c;建议直接通过如下指令安装&#xff1a; sudo apt-get install linux-tool…

【Access】Access:SQL 语句汇总

目录 一、SQL 的功能 二、考试重点 三、关系的定义 &#xff08;1&#xff09;新建关系 &#xff08;2&#xff09;删除关系 四、SQL 的「数据查询」功能 &#xff08;1&#xff09;基本结构 ① Select 语句的基本结构 ② Select 子句 ③ Where 子句 ④ 空值的处…

HTB-TheNotebook

HTB-TheNotebook 信息收集80端口JWT攻击 立足www-data -> noahnoah -> root 信息收集 80端口 存在一个登录和注册用户业务。先看看登录业务&#xff0c;在登录中如果我输入不存在的用户就会出现&#xff1a; Login Failed! Reason: User doesn’t exist. 如果是存在的用…

Value for SWIFT_VERSION cannot be empty错误解决

出错: 解决方法: 选择后 重新编译成功

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码 相关链接 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现 1 题目 列车时刻表优化问题是轨道交通…

​力扣解法汇总1376. 通知所有员工所需的时间

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 公司里有 n 名员工&#xff0c;每个员工的 ID 都是独一无二的&#xff0c;编号从…

【五一创作】【笔记】Git|如何将仓库中所有的 commit 合成一个?又名,如何清除所有 git 提交记录?(附 git rebase 机制的简要分析)

在对代码进行开源时&#xff0c;我们往往并不希望代码开发过程中的提交记录被其他人看到&#xff0c;因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上&#xff0c;往往会用 rebase 和 squash 或 reset&#xff0c;不过我尝…

【Unity-UGUI控件全面解析】| Button 按钮组件详解

🎬【Unity-UGUI控件全面解析】| Button 按钮组件详解一、组件介绍二、组件属性面板2.1 Transition 类型三、代码操作组件四、组件常用方法示例4.1 监听点击事件4.2 按钮过度动画示例💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首…

JavaWeb——JavaScript

定义: js引入方式&#xff08;两种方式&#xff09; js基础语法 输出语句 变量 var的变量特点1:作用域大&#xff0c;是全局变量 var的变量特点2:可以重复声明 ES6最新增的关键字 数据类型&#xff0c;运算符&#xff0c;流程控制语句 js中也有着类似java的8大基本数据类…

企业级信息系统开发讲课笔记3.3 基于XML配置方式SSM框架西蒙购物网

文章目录 零、本节学习目标一、网站功能需求二、网站设计思路&#xff08;一&#xff09;设计模式&#xff08;二&#xff09;网站前台&#xff08;三&#xff09;网站后台1、用户管理2、类别管理3、商品管理4、订单管理 &#xff08;四&#xff09;购物流程图 三、网站运行效果…