计算机考研精炼 操作系统

第 14 章 操作系统概述

14.1 基本概念

14.1.1 操作系统的基本概念

        如图 14 - 1 所示,操作系统是计算机系统中的一个重要组成部分,它位于计算机硬件和用户程序(用户)之间,负责管理计算机的硬件资源,为用户和应用程序提供一个统一的、友好的、安全的接口,使计算机能够高效运行。
        操作系统具有 4 个基本特征,包括并发性、共享性、虚拟性和异步性。并发性指的是操作系统可以在一段时间内处理多个任务。共享性指的是操作系统可以让多个进程共享计算机中的各类资源。虚拟性指的是操作系统可以为每个进程提供一个虚拟的计算机环境,包括通过时分复用虚拟 CPU,通过空分复用虚拟内存等。异步性是指操作系统可以响应不同的事件并采取相应的措施,而不必等待前一个事件处理完成。这种事件可以是来自用户的输入、来自硬件设备的中断、来自其他进程的信号等。例如,在一个多任务操作系统中,当一个进程被阻塞等待输入时,操作系统可以切换到其他进程并继续执行,而不必等待当前进程的输入完成。当输入完毕后,操作系统会再次切换回该进程并继续执行。
        显然,如果要体现共享性,至少需要多个进程并发,而进程并发也必须共享资源,因此,虚拟性和异步性也需要依赖于并发性和共享性。由此可以说,并发性和共享性是操作系统最基本的两个特征。

14.1.2 操作系统的发展历程

        操作系统的发展历程可以追溯到 20 世纪 50 年代。最初的操作系统是批处理系统,随后发展出分时系统、实时系统、分布式系统等多种类型的操作系统。现代操作系统一般具有多任务处理、多用户支持、虚拟内存、文件系统、网络支持等功能。批处理系统是过去 408 真题的重点,考生应该重点关注。由于近年 408 真题风格多变,与实时系统和分时系统相关的考题未必不会出现在未来的真题中。

14.1.3 程序运行环境

1. CPU 运行模式

        CPU 运行模式分为内核模式和用户模式两种。内核模式下的程序可以访问所有的系统资源,包括内核数据结构和硬件资源等;而用户模式下的程序只能访问受限的系统资源,不能直接访问内核数据结构和硬件资源,必须通过系统调用等方式才能访问这些资源。

2. 中断和异常的处理

        中断和异常是操作系统处理外部事件的重要机制。中断是由硬件设备发出的信号,表示设备已经完成了某个操作或发生了某个事件;异常则是由程序执行过程中遇到的错误或异常情况所触发的事件。操作系统可以通过中断和异常来响应外部事件,并采取相应的措施。
如图 14 - 2 所示,中断处理流程主要分为如下几个步骤。
(1)测定是否有未响应的中断信号。
(2)保护被中断进程的 CPU 环境。
(3)转入相应的中断处理程序。
(4)中断处理。
(5)恢复 CPU 的现场并退出中断。

3. 系统调用

        系统调用是程序访问操作系统服务的一种机制。程序在用户模式下通过系统调用向操作系统请求服务,例如读 / 写文件、创建进程、进程间通信等。系统调用是程序与操作系统之间的接口,操作系统根据系统调用提供相应的服务并返回结果。
图 14 - 3 所示为系统调用的基本流程。
(1)应用程序通过系统调用向操作系统发起请求,这个过程需要传递系统调用参数。
(2)执行 trap 指令,使 CPU 从用户模式转为内核模式。
(3)操作系统在内核模式下执行系统服务。
(4)操作系统完成系统服务后,返回到用户模式,继续执行。

4. 程序的链接与装入

        程序的链接和装入是指将程序中的模块链接成一个可执行文件,并将可执行文件装入内存中执行的过程。链接过程将程序中的各个模块链接起来形成一个完整的程序,而装入过程将可执行文件装入内存中并分配相应的地址空间。程序的链接和装入过程如图 14 - 4 所示。

5. 程序运行时内存映像与地址空间

        程序运行时,操作系统会为其分配一定的地址空间,包括代码段、数据段和堆栈段等。代码段存放程序的可执行代码,数据段存放程序运行时所需的数据,堆栈段则用于存放程序的运行时栈。操作系统还会维护程序运行时的内存映像,包括代码、数据、堆栈等的物理地址和虚拟地址的映射关系,以及页面置换和内存保护等机制,以保证程序运行的安全性和稳定性。操作系统为每个进程分配独立的虚拟地址空间,使每个进程都有自己独立的地址空间,可以独立地访问内存中的数据。进程之间的地址空间是相互独立的,每个进程只能访问自己的地址空间,不能直接访问其他进程的地址空间。

14.1.4 操作系统结构

        根据应用场景的不同,操作系统可以设计成不同的结构,如图 14 - 5 所示,宏内核和微内核就是两种常见的结构。

1. 分层

        分层式操作系统是一种将操作系统的不同功能划分为多个层次的操作系统设计范式,每个层次负责一定的功能,层与层之间通过标准接口进行通信。分层式操作系统具有良好的模块化结构和可扩展性,同时层次结构也有助于提高操作系统的可靠性和安全性。

2. 模块化

        模块化操作系统是一种基于模块化设计的操作系统,将操作系统的各个组件划分为独立的模块,模块之间通过标准接口进行通信。模块化操作系统具有较好的可扩展性和可维护性,可以方便地添加新的功能模块或替换已有的模块,但由于模块之间的耦合性较高,因此模块化操作系统的性能和可靠性相对较差。

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

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

相关文章

什么是基尔霍夫第一定律

基尔霍夫第一定律(Kirchhoffs First Law),也称为基尔霍夫电流定律(Kirchhoffs Current Law,简称 KCL),是电路分析中最基础的定律之一。它描述了电路中电流的守恒特性,适用于任何集总…

解决 RN Switch 组件在安卓端样式很丑的问题

解决此种问题的方式有很多 可以导入原生库react-native-switch 切图 (会缺少动画) 使用 js 组件 这里使用 js 绘制组件(原生体验)解决此类问题 Switch.tsx import React, { useEffect, useRef, useState } from react; import { Animated, Pressabl…

【AI】【MCP】搭建私人王炸MCP自动化工作流

目录 一、什么是MCP 二、MCP大集合 三、准备工作 3.1 安装node.js 3.2 安装vscode 3.3 安装cline插件 3.3.1 安装 3.3.2 配置Cline 四、配置MCP服务 4.1 Search-mcp服务 4.2 playwright-mcp 服务 前言:梦想组合,轻松办公,告别手动&a…

Git 实操:如何使用交互式 Rebase 移除指定提交(真实案例分享)

在日常开发中,有时候我们提交了一些不想保留的记录,比如测试代码、错误的功能提交等。 ⚠️ 在操作 4. 强制推送到远程仓库前的注意事项 强制推送(git push --force 或 git push -f)确实很强大但也危险,因为它会重写…

11.Excel:函数

一 函数是什么 函数是定义好的公式。 单元格内输入sum然后tab,框选要求和的范围,然后回车键。 补充:公式。 公式以开头,可以用于计算,返回数值。 分别点击各个数值,中间用加号连接。这样很不方便&#xff…

Springboot使用ThreadLocal提供线程局部变量,传递登录用户名

文章目录 概述使用创建ThreadLocalUtil工具类在登录拦截器中使用ThreadLocal存储登录用户名在/userInfo接口中获取登录用户名 注意事项参考视频 概述 使用 创建ThreadLocalUtil工具类 utils/ThreadLocalUtil.java package org.example.utils;/*** ThreadLocal 工具类*/ Supp…

1399. 统计最大组的数目

1399. 统计最大组的数目 题目链接&#xff1a;1399. 统计最大组的数目 代码如下&#xff1a; class Solution { public:int countLargestGroup(int n) {int res 0;unordered_map<int, int> um;int maxValue 0;for (int i 1;i < n;i) {string value to_string(i);…

VS Code 插件Git History Diff 使用

右上角 查看单个文件记录

数学建模论文手的学习日常01

目录 一.要写的内容&#xff1a; 二.文章标题&#xff1a; 三.摘要&#xff08;非常非常非常重要&#xff09; 四、关键词&#xff1a; 五、问题重述 六、模型假设 七、符号说明 八、模型的建立与求解 九、模型的分析与检验 十、模型的评价、改进与推广 十一、参考…

深度学习: AI 体育领域

一、引言 在科技与体育深度融合的当下&#xff0c;AI 体育逐渐成为推动体育行业变革的重要力量。深度学习凭借其强大的数据分析与模式识别能力&#xff0c;为 AI 体育带来了全新的发展机遇。从运动员动作分析到智能健身指导&#xff0c;从赛事预测到运动康复辅助&#xff0c;深…

在 Ubuntu24.04 LTS 上 Docker 部署英文版 n8n 和 部署中文版 n8n-i18n-chinese

一、n8n 简介 n8n 是一个低代码&#xff08;Low-Code&#xff09;工作流自动化平台&#xff0c;可以帮助用户以非常简单的方式创建自动化流程&#xff0c;连接不同的应用程序和服务。n8n的设计理念是为了让复杂的工作流变得简单易用&#xff0c;同时也支持高度的自定义&#xf…

《系统分析师-第三阶段—总结(八)》

背景 采用三遍读书法进行阅读&#xff0c;此阶段是第三遍。 过程 本篇总结第15章的内容 第15章 总结 系统运行与维护&#xff0c;系统经过测试交付之后&#xff0c;进入运行维护阶段&#xff0c;维护分为系统运行、故障维护、系统评价和系统相关的策略。 疑问&#xff1a;…

LeetCode 1295.统计位数为偶数的数字:模拟

【LetMeFly】1295.统计位数为偶数的数字&#xff1a;模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-numbers-with-even-number-of-digits/ 给你一个整数数组 nums&#xff0c;请你返回其中位数为 偶数 的数字的个数。 示例 1&#xff1a; 输入&#xff1…

DDD是什么?电商系统举例

一、DDD的基本概念 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;简称DDD&#xff09;是由Eric Evans提出的一种软件开发方法论&#xff0c;旨在应对复杂业务系统的设计和实现。它的核心思想是将软件的设计与业务领域紧密结合&#xff0c;通过深入理解业务需求&a…

K8S ConfigMap 快速开始

一、什么是 ConfigMap&#xff1f; ConfigMap 是 Kubernetes 中用于存储非敏感配置数据的 API 对象&#xff0c;支持以键值对&#xff08;Key-Value&#xff09;或文件的形式存储配置&#xff0c;允许将配置与镜像解耦&#xff0c;实现配置的集中管理和动态更新。 二、主要用…

Prometheus使用Recoding Rules优化性能

通过PromQL可以实时对Prometheus中采集到的样本数据进行查询&#xff0c;聚合以及其它各种运算操作。而在某些PromQL较为复杂且计算量较大时&#xff0c;直接使用PromQL可能会导致Prometheus响应超时的情况。这时需要一种能够类似于后台批处理的机制能够在后台完成这些复杂运算…

C++ RAII 编程范式详解

C RAII 编程范式详解 一、RAII 核心概念 RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;资源获取即初始化&#xff09; 是 C 的核心编程范式&#xff0c;通过将资源生命周期与对象生命周期绑定实现安全、自动化的资源管理。 核心原则&#xff1a; 资源…

Rust 学习笔记:枚举与模式匹配

Rust 学习笔记&#xff1a;枚举与模式匹配 Rust 学习笔记&#xff1a;枚举与模式匹配定义枚举&#xff08;Enum&#xff09;枚举变量Option 枚举及其相对于 NULL 的优势match 和枚举与 Option\<T\> 匹配match 应该是详尽的Catch-all 模式和 _ 占位符使用 if let 和 let e…

《WebGIS之Vue进阶教程》(13)ref的实现

1 为什么需要ref 由于proxy只能代理引用类型数据(如: 对象, 数组, Set, Map...), 需要一种方式代理普通类型数据(String, Number, Boolean...) 设计ref主要是为了处理普通类型数据, 使普通类型数据也具有响应式 除此之外, 通过reactive代理的对象可能会出现响应丢失的情况. 使…

Redis 缓存并发问题深度解析:击穿、雪崩与穿透防治指南

Redis-缓存并发 引言&#xff1a;缓存&#xff0c;高性能架构的基石与并发挑战一、 缓存击穿&#xff1a;热点 Key 失效引发的“单点风暴”1.1 什么是缓存击穿&#xff1f;1.2 缓存击穿的风险1.3 缓存击穿的解决方案1.3.1 互斥锁&#xff08;Mutex Lock&#xff09;/ 分布式锁 …