操作系统(第二周 第二堂)

简介: 操作系统(第二周 第二堂)



前言

重点一

前一堂的重点就一张图:

本图解释了操作系统如何通过指令的双类型以及操作系统的双模式来实现对操作系统的保护,从而让操作系统不会因为用户的非法指令崩溃

重点二

上篇第二个重点就是编程工具集以及GDB调试工具,其中重点的指令有:

1、gcc -g:编译并包含调试、源代码信息(只有如此拿这个二进制文件才能返回出源代码的汇编语言格式)

2、gcc -o:生成目标文件(可运行)

3、gcc -s:生成源程序的汇编语言模式

4、gdb -x:对目标文件开启gdb调试模式(目标文件可以直接查看其汇编语言)

5、start:开始调试

6、info all-registers:查看寄存器中各个指令所在的位置

7、jump:跳转到对应的指令所在的位置

8、x/i:查看一条条指令(gdb模式会自动把目标文件转化为汇编语言供查看)

9、nexti:执行下一条指令

到这里过所有的introduction都已经结束了!!!接下来我们将更详细的加入每个部分!

操作系统结构

研究操作系统结构就是研究操作系统,而研究操作系统就是研究操作系统的服务接口以及系统组件与相互关系(从上层逐渐底层)。

操作系统的服务

框架

理解操作系统首先要理解它的服务(有什么,如何使用),下面这张图很好的解释了操作系统与服务在整个计算机体系中的地位(重点)

一、 硬件、用户及其他系统程序之间的交流交互需要操作系统的参与

二、操作系统总结出用户及其他应用程序与硬件之间所需要的一些交互行为并将其包装为服务

三、这些服务(可能对计算机运行造成破坏)并不能随便为用户调用,所以操作系统将这些服务进一步打包变为系统调用

四、系统调用可以认为是操作系统服务的接口,当然也是操作系统服务的一部分

五、操作系统为了用户操作更便利,为用户提供了用户界面。这个界面包括GUI(图形化界面,例如macos、window等),命令行(挂cenos服务器仅仅有命令行操作)、批处理(不用理解)

详细理解(仅挑部分重要的)

一、系统调用(system call):给用户或应用程序作为操作系统服务的接口,使得用户可以在不破坏操作系统的同时完成对硬件的交互

二、用户界面:为了convenience目标,使得用户使用操作系统更加方便、门槛降低,这也直接使得PC机出现成为可能

三、程序执行:用户在编写完代码后,需要把程序放到内存中存储,也需要放到cpu上去执行。这一切都需要通过操作系统给的接口

四、I/O操作:程序运行可能需要I/O操作,而I/O操作一定需要陷入内核(之前分析过原因),所以一定要调用操作系统。调用操作系统的服务也就是需要系统调用

五、文件系统操作:操作系统支持对电脑中的文件进行创建、修改、删除和访问。(前段时间,部署web程序到服务器(linux系统)上时,才知道服务器上面是不支持用户去访问文件的。需要通过tomcat去访问文件

六、通信:一个进程和另一个进程之间需要进行通信,这个通信不能直接发生而是必须要经过操作系统作为中间人(后面讲现代操作系统的结构模式时会分析原因,主要是为了让操作系统的体量更小灵活度更高)

七、资源分配:由于现代的操作系统都支持并行程序运行,所以这就涉及到并行程序运行时的进程管理,而进程管理也就是对程序运行时的资源进行分配

八、保护与安全:保护是对计算机每个用户进行保护,安全是针对系统上每个进程的运行进行安全保护

用户界面——shell(终端)

前面说的操作系统提供的服务中有一个就是用户界面,而这个用户界面中除了大家熟知的GUI界面,更原始的其实是命令行界面。命令行界面的的一个代表就是shell,也就是我们平常说的终端。

终端也就是一个应用程序(和DBMS、程序编辑器等属于一个地位——系统应用),只不过这个应用程序能够识别程序员写的命令并把这个命令转化为相应的操作系统服务包装的接口(Api),再通过Api去完成这个命令所蕴含的动作。

系统调用 (system call)

特点

一、系统调用是提供操作系统服务的接口

二、这些调用通常以c或cpp编写

三、系统调用一般不能直接被用户使用,通常被封装再API中

四、API未封装system call则就是平常我们写的函数体。判断API是否封装系统调用就是看他运行时是否陷入内核。因为系统调用是为了调用os的服务,所以一定会陷入内核

图中展示的是一个源程序调用编译这个系统调用方法,以及程序运行中调用的文件系统操作的系统调用方法

方式

一、每个系统调用都有一个相关的数字,这个数字表示系统调用程序在操作系统内核中的位置

二、当系统调用触发时,会自动跳转到这个位置去执行系统调用程序

三、不同操作系统提供的API可能存在不同

图中展示了一个应用程序调用系统调用接口,然后这个接口去定为到系统调用所在的位置去具体的跑系统调用程序

总结

本文到这里就结束啦~~这堂课设计的内容较为杂乱、复杂,但是学一学拓展一下知识是非常好的呀~~

如果觉得对你有帮助,辛苦友友点个赞哦~

知识来源:操作系统概念(黑宝书)、山东大学高晓程老师PPT及课上讲解。不要私下外传

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2月前
|
弹性计算 负载均衡 数据库
阿里云服务器最便宜多少钱一年?38元轻量和99元ECS机型对比,哪台更优惠?
阿里云最便宜云服务器:新用户38元/年轻量应用服务器(2核2G/200M峰值带宽/40G ESSD),老用户99元/年ECS经济型e实例(2核2G/3M固定带宽/40G ESSD Entry)。配置相近,轻量限新用户,ECS新老用户皆可,续费同价。单机应用首选轻量,需高可用架构选ECS。
828 2
|
搜索推荐 流计算 索引
图文检索
图文检索简介
图文检索
|
7月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
612 99
|
4月前
|
SQL 前端开发 数据处理
Python 项目实战入门:从 0 到 1 搭建简易学生信息管理系统
本文以简易学生信息管理系统为例,详解Python Web项目从需求分析、技术选型到编码部署的完整流程。采用Flask+SQLite+Bootstrap轻量栈,实现增删改查与Excel导出,助初学者快速掌握开发逻辑与实战技能。
|
存储 运维 监控
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
544 1
|
人工智能 Cloud Native 大数据
云+AI开启算力新时代,共建开源开放生态赴未来 | 2024龙蜥大会主论坛
本次分享的主题是云 + AI开启算力新时代,共建开源开放生态赴未来 | 2024龙蜥大会主论坛,由阿里巴巴集团合伙人、阿里云基础设施事业部总经理蒋江伟分享。
332 6
|
关系型数据库 数据管理 应用服务中间件
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,为了实现数据的持久化和共享,可以通过数据卷(Data Volumes)和数据卷容器(Data Volume Containers)两种方式来管理数据。数据卷是一个独立于容器的挂载目录,可以跨多个容器共享和重用。数据卷容器则是一种特殊容器,用于维护数据卷,便于数据迁移和共享。本文通过示例详细介绍了这两种方法的使用步骤。
300 1
|
网络协议 Linux
linux学习之套接字通信
Linux中的套接字通信是网络编程的核心,允许多个进程通过网络交换数据。套接字提供跨网络通信能力,涵盖本地进程间通信及远程通信。主要基于TCP和UDP两种模型:TCP面向连接且可靠,适用于文件传输等高可靠性需求;UDP无连接且速度快,适合实时音视频通信等低延迟场景。通过创建、绑定、监听及读写操作,可以在Linux环境下轻松实现这两种通信模型。
421 1
|
JavaScript 前端开发 Java
JSP基本语法
这篇文章详细介绍了JSP的基本语法,包括脚本标识、注释、指令标识和动作标识的使用方法和语法格式。
JSP基本语法
|
设计模式 测试技术 数据库连接
Entity Framework Core 中的依赖注入超厉害!DI 与 DbContext 完美结合,提升开发效率
【8月更文挑战第31天】依赖注入(DI)是一种软件设计模式,用于将对象的依赖关系与其创建过程解耦,从而提升代码的可测试性、可维护性和可扩展性。在Entity Framework Core中使用DI能够提高可测试性,便于替换DbContext实现以进行单元测试;增强可维护性,使代码模块化并清晰展示组件间的依赖关系;提升可扩展性,方便添加新服务和功能而不需修改现有代码。通过Microsoft.Extensions.DependencyInjection等依赖注入容器,可将DbContext注册并注入到需要使用的类中,简化数据库管理和测试流程。
453 0