深入理解Windows操作系统机制(四)

news2024/12/26 13:30:01

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。

我们每天都在用Windows操作系统,但是其实我们每天直接在打交道的并不是Windows操作系统的内核,而是Windows操作系统的人机交互界面,这个界面其实只是Windows操作系统的一个组件,在Linux上,我们使用Linux系统所使用的界面则只是Linux系统上的一个程序。所以说,我们接触的并不是这些系统的内核。久而久之,我们基本会慢慢把界面里所展示的直观的东西误认为是Windows操作系统本身,其实这是不对的。

我们来重新审视Windows操作系统,看看Windows操作系统本身典型特征和主要功能。由Windows操作系统的功能,可以知道Windows操作系统提供的服务有下面这些:提供了一个用以执行程序的环境,提供的服务有程序执行、I/O操作、文件操作、资源分配与保护、错误检测与排除等。

Windows操作系统借用了多道程序设计的理念,所谓多道程序设计技术就是指在内存中同时存放两道或两道以上的作业,这些作业同时处于运行状态,且它们在管理程序控制下,相互穿插运行。这些作业共享处理器、外设以及其他资源。

Windows操作系统的中断处理程序只能是操作系统程序,不可能是应用程序。中断处理属于系统中会对系统产生重大影响的动作,因此只允许核心态程序执行。而应用程序通常指用户程序,运行在用户态下,不能进行这些操作。

虚拟

说到操作系统的虚拟,你是怎么理解的?基本上可以有下面三种描述 :

①由于一台计算机配置了操作系统和其他软件,因此比一台裸机功能更强大,使用更方便,称为虚拟机。由于操作系统自身包含了若干层软件,因此该计算机系统又可称为多层虚拟机。

②如在多道分时系统中,利用多道程序设计技术可以把一台物理上的CPU虚拟为多台逻辑上的CPU,而供多个终端用户使用。

③虚拟存储器,仅把作业的一部分装入内存便可运行作业,从逻辑上对内存容量进行了扩充。又如在设备管理中虚拟设备技术的使用,可将一台物理设备变换为若干台逻辑上的对应物。

控制

在Windows这么一个具有分时特点的操作系统中,有一个程序的功能如下:
(1)将文本数据从文件中读出。
(2)排序
(3)将排好序的数据写入文件。
下面我们从分时操作系统对资源管理的角度以及进程的生命周期两方面,论述该程序从开始执行到结束,操作系统为其提供服务与控制的全过程。

从文件中读数据时,通过read系统调用完成。它首先创建一条消息,其中包含fd(文件描述符)、buffer(缓冲区)、nbytes(大小)等参数,以及表示READ类型的消息码。然后将这条消息送给文件系统,并阻塞该进程以等待文件系统的响应,文件系统在收到消息后,以消息类型为下标查找过程表,调用相应过程处理读请求。数据输入完成后,操作系统切换到排序进程,开始进行排序工作。在排序工作结束后,操作系统调用write系统调用来完成,write系统调用将进程缓冲区中的数据写到与文件描述符关联的文件中。和read系统调用非常相似,同样需要3个参数:fd、buffer、nbytes。两个系统调用都返回所成功传送的字节数,或者发送一个错误条件的信号并返回-1。

操作系统与硬件的关系:操作系统是覆盖在硬件上的第一层软件,它管理计算机的硬件资源。操作系统为用户完成所有与硬件相关的操作,从而极大方便了用户对硬件资源的使用,并提高了硬件资源的利用率。操作系统与其他系统软件的关系:操作系统是一种特殊的系统软件,其他系统软件运行在操作系统的基础之上,可获得操作系统提供的大量服务,也就是说,操作系统是其他系统软件与硬件之间的接口。

保护

对于一个正确运转的计算机系统,保护操作系统是非常重要的。但为了向用户提供更大的灵活性,应尽可能少地对用户加以限制。下面列出的各操作通常是加以保护的。试问至少有哪几条指令需加以保护?
(1)改变成用户方式。
(2)改变成系统方式。
(3)从存放操作系统的存储区读取数据。
(4)将数据写到存放操作系统的存储区上
(5)从存储操作系统的存储区取指令。
(6)打开计时器。
(7)关闭计时器。

操作2、4应加以保护。因为这两条操作是对操作系统本身的内容加以修改。如果交由用户任意操作就会对操作系统造成破坏并最终导致系统运行出错或系统崩溃,所以应在任何情况下加以保护。其他几种操作在一般情况下也应加以保护,但即使这些操作交由用户操作,也不会出现像上述两种操作那样的破坏性。

函数

我们再来说一说库函数与系统调用的区别和联系。

区别:库函数是语言或应用程序的一部分,可以运行在用户空间中。而系统调用是操作系统的一部分,是内核提供给用户的程序接口,运行在内核空间中。

联系:许多库函数都会使用系统调用来实现功能。没有使用系统调用的库函数,执行效率通常比系统调用高,因为使用系统调用时,需要上下文的切换以及状态的转换(从用户态转为核心态)。

调度

Windows操作系统具有分时兼批处理的功能,那我们能不能设计一个合理的队列调度策略,使得分时作业响应快,批处理作业也能及时得到响应。 

我想我们是可以的。批处理系统中,将作业依次以脱机输入方式输入到磁带上,监督程序依次执行磁带上的作业,作业执行时用户无法干预其运行。批处理系统按照发展历程可分为单道批处理系统和多道批处理系统,主要区别为内存中同时存在单个或多个作业。多道批处理系统中的一道程序因I/O请求而暂停执行时,借助中断技术,CPU转而去运行另一道程序。

我们可设计两个优先级队列。分时作业进入高优先级队列,采用短时间片的时间轮转法调度。当高优先级队列空时,调度低优先级的成批作业,并给予较长的时间片。

指令

然后,我们再从指令的角度来看看操作系统,假定Windows操作系统下面指令已装入指令寄存器,则执行时不会导致CPU从用户态变为内核态的有哪些呢?

第一条命令   DIV R0,R1;(R0)/(R1)->R0

第二条命令   INT n;     产生软中断

第三条命令   NOT R0;     寄存器R0的内容取非

第四条 命令   MOV R0,addr;     把地址addr处的内存数据放入寄存器R0中

第一条命令中若R1中的内容为0,则会出现内中断,从用户态变为内核态;第二条 命令软中断在内核态执行;第三条命令寄存器取非不会产生中断,且不属于其他操作系统内核,故不会变为内核态;第四条addr是主存地址,访存需要进入内核态。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

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

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

相关文章

H3C-Cloud Lab实验-PPPoE实验

实验拓扑图: 实验需求: 1. 如图,私网内部配置为 192.168.1.0/24 网段,R2 上配置 Loopback0 口模拟互联网地址 2. 配置 R2 为 PPPoE Server,为 R1 提供 PPPoE 拨号服务,并为 R1 自动分配公网 IP 地址 3. …

【unity之IMGUI实践】抽象父类继承实现【三】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Bypass!Burp分块传输绕WAF插件

插件简介 本插件主要用于分块传输绕WAF,不了解分块传输绕WAF的可阅读作者这篇文章:【第8周】编写Burp分块传输插件绕WAF 。 关注【Hack分享吧】公众号,回复关键字【230605】获取下载链接 插件使用 延时分块传输

CentOS7.8离线安装Docker24.0.2,离线安装gcc与g++环境

背景 有时候运维时要求在内网环境下操作,即服务器无法连接互联网,那么就无法通过 yum 源在线安装。。这时,一般通过以下3种方式来安装需要的软件: 下载源码包编译安装;下载对应平台编译好的安装包,解压即…

了解JVM

PS:本文以下部分,默认都是使用HotSpot,也就是Oracle Java 默认的虚拟机为前提来进行介绍的。 1.JVM执行流程 程序在执行之前先要把Java代码转换成字节码(.class文件),JVM首先需要把字节码通过一定的方式类加载器(Clas…

python调用oepnai API

目录 apiAI官网介绍([Introduction](https://platform.openai.com/docs/api-reference/introduction))安装官方SDK认证(Authentication)申请API KEY请求组织(Requesting organization) 发送请求关于chat to…

CAJ文献如何转成PDF?分享两个免费的方法!

CAJ格式是中国知网(CNKI)常见的电子文献格式,但有时我们可能更倾向于将其转换为PDF格式以便于查阅、存储和共享。为了帮助大家完成这个任务,下面将分享两种免费的方法来将CAJ文献转换为PDF格式。无论您是研究学者、学生还是对特定…

学校招生报名小程序开发笔记(一)

背景 这是一个以报名为核心的职业学校招生小程序,目的是方便想要系统学习技能,入门某项技能或者领域的初高中毕业生,了解该学校的基本情况及各个专业,并提供报名路径,致力于技能型人才培养 功能规划 主要功能包括专…

使用 Pytest 运行 yaml 文件来驱动 Appium 自动化测试

目录 前言: 获取 yaml 文件 YamlTest 测试类 Appium 初始化 Pytest 测试类 自定义 runtest demo: 自定义错误输出 Yaml 使用方式规则 前言: 使用Pytest来运行yaml文件来驱动Appium自动化测试是一种方便且灵活的方法。通过将测试数据…

【异常解决】postman请求提示Full authentication is required to access this resource

Full authentication is required to access this resource解决办法 报错问题:在使用 postman 测试接口时,该接口需要在 Header 中传入 access_token,实际上也在请求的 Header 中添加上了 access_token 参数,但是服务端还是返回4…

【STM32零基础入门教程01】STM32入门基础知识

本篇内容为STM32零基础入门教程的第一篇,网上STM32的教程很多,有些初学者还是望而却步。其实STM32并不难,只是一个新的事物出现在我们面前一时间不适应,思来想去我打算写点东西一方面自己有点知识的积累,另一方面希望可…

Python教程(4)——Python开发工具PyCharm的下载与安装

PyCharm是一种专业的Python集成开发环境(IDE),由JetBrains公司开发和维护。它提供了丰富的功能和工具,帮助开发人员更高效地编写、调试和测试Python代码。如果是一些大型Python项目强烈推荐用这个来开发。今天我们来介绍一下PyCha…

【实战】 七、Hook,路由,与 URL 状态管理(中) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十二)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

Docker基础(二)

1、Docker工作原理 Docker是一个Clinet-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说的…

论文笔记:Deep Spatio-Temporal Residual Networks for Citywide Crowd FlowsPrediction

2017 AAAI 使用时空残差网络ST-ResNet 进行 城市区域流入流出客流量预测 1 研究对象 城市客流流入流出 根据经纬度将城市划分为网格 IJ 1.1 难点 空间依赖性 时间依赖性 外部影响 2 模型 3 实验 北京出租车数据纽约自行车数据 评价指标:RMSE

Java List中通过对象属性排序,可实现多条件排序

直接上代码: import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.Data;import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;/*** List 对象属性排序*/Data AllArgsConstructor clas…

[java安全]动态代理

文章目录 【java安全】动态代理前言本质重要方法Proxy#newProxyInstance()InvocationHandler#invoke() 举例 【java安全】动态代理 前言 java中代理分为两种:静态代理、动态代理 而动态代理又分为:jdk动态代理、CGLIB动态代理 本文我们来谈谈jdk动态代…

Iceberg从入门到精通系列之十七:Apache InLong往Iceberg同步数据

Iceberg从入门到精通系列之十七:Apache InLong往Iceberg同步数据 一、概览二、版本支持三、依赖项四、SQL API 用法五、多表写入六、动态表名映射七、动态建库、建表八、动态schema变更九、Iceberg Load 节点参数十、数据类型映射 一、概览 Apache Iceberg是一种用…

【机器学习算法】主成分分析(PCA)

主成分分析(PCA) PCA(Principal Component Analysis) 是实现数据降维的一种算法。正如其名,假设有一份数据集,每条数据的维度是d,PCA通过分析这d个维度的前k个主要特征(这k个维度在原有d维特征的基础上重新构造出来,且是全新的正交…

SpringBoot+React学科竞赛管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootReact框架开发的学科竞赛管理系统。首先,这是一个前后端分离的项目,代码简洁…