【Linux系统编程】——Linux操作系统的魔法桥梁:从命令行到内核的奇遇记

文章目录

  • Linux操作系统的概念(是什么?)
  • 设计操作系统的目的(为什么?)
  • 核心功能(怎么办?)
    • 如何理解“管理”——软硬件的管理
      • 硬件管理
      • 软件管理
  • 系统调⽤和库函数概念
    • 系统调用(System Call)
    • 库函数(Library Function)

Linux操作系统的概念(是什么?)

Linux 是一种开源的类 UNIX 操作系统。它的内核(kernel)是由 Linus Torvalds 在 1991 年首次发布。内核是操作系统的核心部分,负责管理系统的硬件资源,如 CPU、内存、磁盘 I/O 等。例如,当一个程序需要访问内存时,内核会决定是否允许该程序访问,并分配相应的内存空间。

围绕内核,有各种各样的软件和工具构成了完整的 Linux 操作系统。这些软件包括系统工具(如文件管理工具、进程管理工具)、用户应用程序(如文本编辑器、浏览器等)和各种服务(如网络服务、数据库服务)。

操作系统 = 内核 + 其他程序

内核 = 进程管理 + 内存管理 + 文件管理 + 驱动管理+…
其他程序 = 例如函数库 + shell程序 + …

一个基本的程序集合,称为操作系统——操作系统是一款进行管理软件、硬件的软件
在这里插入图片描述

上面我们已经讲清楚了操作系统是什么?

接下来我们将从操作系统为什么?以及操作系统怎么办?进行讲解

设计操作系统的目的(为什么?)

先说结论

对下,与硬件交互,管理所有的软硬件资源
对上,为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境

在这里插入图片描述
系统软件部分

  1. 软硬件体系结构层状结构。
  2. 访问操作系统必须使用系统调用——其实就是函数,只不过是系统提供的。
  3. 我们的程序,只要判断它访问了硬件,那么它必须贯穿整个软硬件体系结构。
  4. 库可能在底层封装了系统调用

硬件部分,其实就是冯诺依曼结构,有兴趣的读者可以看看作者的上一篇文章——冯诺依曼体系结构的介绍

核心功能(怎么办?)

在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件

如何理解“管理”——软硬件的管理

在学校当中,我们知道有校长、辅导员、学生这三个身份,其中校长就是管理者,学生是被管理者,辅导员是什么我们暂且不谈,当校长需要对我们进行管理的时候,需要见到我们吗?答案显而易见,并不需要,他只需要对辅导员下达命令,让辅导员对我们进行管理,而辅导员就是一个承上启下的一个点,他从校长那边接收指令,给学生进行反馈,我们的信息,比如学习成绩、获得的奖项、学费交没有交,等等问题,校长都可以不需要通过自己去搜索,而是通过辅导员——对我们进行管理。

  1. 要管理,管理者和被管理者,可以不需要见面
  2. 管理者和被管理者 ,怎么管理呢? 根据“数据”进行管理!
  3. 不需要见面,如何得到数据?由中间层获取!
    在这里插入图片描述

硬件管理

操作系统在硬件管理方面,主要是通过协调和调度计算机硬件资源的使用,确保系统中的硬件资源得到高效、合理的利用。具体包括:

CPU调度:操作系统调度 CPU 时间片,以实现多任务的并发执行。通过调度算法(如先来先服务、时间片轮转、优先级调度等),操作系统保证多个进程能够公平、有效地使用 CPU。它也负责进程间的同步与互斥,避免竞争条件和死锁等问题。

内存管理:操作系统通过硬件支持的机制(如分页、分段等)管理物理内存和虚拟内存的映射,确保内存资源的有效利用。它负责内存的分配与回收,防止内存泄漏和溢出问题。

I/O设备管理:操作系统通过 I/O 子系统(如 I/O 控制器、驱动程序等)管理各种硬件设备,调度硬件设备的输入输出操作。它为设备提供抽象接口,屏蔽设备差异性,使得应用程序能够在不同硬件平台上运行时获得一致的操作体验。

硬件抽象层(HAL):操作系统通过硬件抽象层将硬件的具体实现与操作系统其他部分进行解耦。HAL使得操作系统能够在不同的硬件平台上运行,而无需为每个平台编写专门的代码,从而提高了操作系统的可移植性。

计算机管理硬件
描述起来,⽤struct结构体
在这里插入图片描述

组织起来,⽤链表或其他⾼效的数据结构
在这里插入图片描述

软件管理

操作系统在软件管理方面的作用主要体现在对运行在计算机上的各类程序(如应用程序和系统程序)的调度、分配和控制。具体包括:

进程管理:操作系统负责创建、调度和销毁进程。它实现了多任务并发运行,并保证进程之间的合理分配 CPU 时间,以提高系统的响应能力和资源利用率。进程的状态切换(如从就绪到运行、从运行到阻塞)由操作系统控制。

内存管理:操作系统负责将内存空间合理地分配给各个运行中的进程,并确保它们不会互相干扰。通过虚拟内存、分页机制等,操作系统提供了对内存的抽象管理,使得每个进程拥有独立的内存空间。操作系统还负责内存的回收和垃圾回收。

文件系统管理:操作系统通过文件系统提供对文件的管理功能,包括文件的创建、删除、读写和访问控制等。文件系统管理确保文件存储的结构性、有效性和数据的完整性。

设备管理:操作系统通过设备驱动程序来管理硬件设备,提供统一的接口,使得用户程序可以方便地与硬件进行交互。它调度硬件设备(如硬盘、打印机、显示器等)的输入输出操作,确保硬件设备的高效、稳定工作。

系统调⽤和库函数概念

在 Linux 系统中,系统调用(System Call)和库函数(Library Function)是两种不同层次的功能调用方式,用于与操作系统交互。

  • 在开发⻆度,操作系统对外会表现为⼀个整体,但是会暴露⾃⼰的部分接⼝,供上层开发使⽤,
    这部分由操作系统提供的接⼝,叫做系统调⽤。

  • 系统调⽤在使⽤上,功能⽐较基础,对⽤⼾的要求相对也⽐较⾼,所以,有⼼的开发者可以对部
    分系统调⽤进⾏适度封装,从⽽形成库,有了库,就很有利于更上层⽤⼾或者开发者进⾏⼆次开
    发。

系统调用(System Call)

定义:系统调用是操作系统内核为用户程序提供的接口,用于完成需要内核权限的操作,例如文件操作、进程管理、内存管理等。
特性:

  • 直接与内核交互:通过软中断或特殊指令将请求从用户态切换到内核态。
    低级接口:系统调用是底层操作,直接操控硬件或操作系统资源。
    固定数量:系统调用是有限的,每种操作系统都有一套固定的系统调用表。

调用方式:

  • 用户程序通过 C 语言提供的接口(通常是库函数)间接调用系统调用。
    系统调用在汇编层面直接通过指令调用,例如 x86 架构上使用 int 0x80 或 syscall 指令。

示例:
文件操作:open(), read(), write()
进程管理:fork(), execve(), wait()
内存管理:mmap(), brk()

库函数(Library Function)

定义:库函数是操作系统或开发环境提供的一组常用功能的实现,属于用户态代码,用于简化开发工作。
特性:

  • 运行在用户态:不直接与内核交互,而是调用系统调用实现底层功能。
    高级接口:提供更高级别、易用的功能封装,通常用来简化系统调用的复杂性。
    可扩展性强:库函数由开发者定义和扩展,可以调用其他库函数或直接使用系统调用。

调用方式:

  • 通过链接相关的库(静态或动态),使用编程语言提供的调用方式。

示例:
标准 C 库函数:printf(), fopen(), malloc()
数学库函数:sin(), cos(), sqrt()
字符串处理:strlen(), strcpy(), strcat()

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

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

相关文章

VBA基础2

VBA基础2 sub过程语法对单元格进行赋值操作连续赋值不连续赋值 cells (行,列)行引用rows列引用 (columns)offset位移属性End属性(指定返回) 使用VBA编辑器需要用AltF11打开 或者VB编辑器打开 可…

支持win7系统的onnxruntime

在win7 X86系统上,使用了onnxruntime.dll库做AI识别,但是在win7上运行报0xc0000005的错误 经查,ONNX Runtime从v1.15.0版本开始不再支持Windows 7及其之前的操作系统,即便尝试重新编译源代码亦无法在这些老系统上运行,…

【服务器监控】grafana+Prometheus+node exporter详细部署文档

我们在进行测试时,不可能一直手动看着服务器的性能消耗,这时候就需要有个工具替我们监控服务器的性能消耗。这里记录下grafanaPrometheusnodeExporter的组合用于监控服务器。 简单介绍: grafana:看板工具,所有采集的…

【密码学】分组密码的工作模式

1.电码本模式(ECB) 优点: 每个数据块独立加密,可并行加密,实现简单。 缺点: 相同明文会产生相同密文,不具备数据完整保护性。 适用于短消息的加密传输 (如一个加密密钥)。 工作流程:用相同的密钥分别对…

PR时间轴

简介 时间轴记录整个项目所发生的一切,它包括视频轨道、音频轨道、字幕轨道,可以队单独的任意轨道进行编辑。 时间轴上还可以使用编辑点对素材进行简单编辑,也可以锁定轨道保证素材不会被其他操作改变。 播放指示器(指针&#x…

【RBF SBN READ】hadoop社区基于RBF的SBN READ请求流转

读写分离功能的背景及架构 当前联邦生产集群的各个子集群只有Active NameNode在工作,当读写任务变得繁忙的时候,只有一个Active负责处理的话,此时集群的响应和处理能力业务侧感知会明显下降,为此,我们将引入Observer架构,实现读写功能的分离,使得Active只负责写请求,而…

记事本建java及java命名规范

1.桌面开发:c# 2. 记事本建java: 以class的名称(类名)为名,名称.java 编译jdk:javac 名称.java 调动运行jre : java 名称 查看名称.java里面的内容:cat 名称.java java 的命名规范 大驼峰(每个单词首…

YOLOv8模型改进 第二十讲 添加三重注意力机制Triplet Attention 提升小目标/遮挡目标

本文这次分享的是三重注意力机制Triplet Attention。现在注意力机制在计算机视觉任务中被广泛研究和应用,如 Squeeze-and-Excitation Networks (SENet)、Convolutional Block Attention Module (CBAM) 等。然而,这些方法存在一些局限性,例如需…

2024年认证杯SPSSPRO杯数学建模D题(第一阶段)AI绘画带来的挑战解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现: 2023 年开年,ChatGPT 作为一款聊天型AI工具,成为了超越疫情的热门词条;而在AI的另一个分支——绘图领域,一款名为Midjourney(MJ&#xff…

如何修复和防止 500 内部服务器错误的发生

当遭遇 500 内部错误时,意味着服务器出现了意外状况,以至于无法对请求予以回应。这种错误往往源于服务器端的各类问题,像是服务器配置出现偏差、脚本存在漏洞或者服务器瞬间负荷过重等。在不少情形下,服务器管理员能够化解此难题&…

算法刷题Day11: BM33 二叉树的镜像

点击题目链接 思路 转换为子问题:左右子树相反转。遍历手法:后序遍历 代码 class Solution:def Transverse(self,root: TreeNode):if root None:return rootnewleft self.Transverse(root.left)newright self.Transverse(root.right)# 对root节点…

【项目】基于YOLOv10的目标检测项目

【项目】基于YOLOv10的目标检测项目 (一)模型性能(二)安装与使用(1)环境安装(2)快速使用(3)模型评估Validation(4)模型训练Training&a…

与火山引擎合作深化,观测云携一站式监控解决方案登陆万有商城

近日,观测云正式宣布入驻火山引擎的万有商城。作为一款全栈式数据观测与分析平台,观测云的加入不仅丰富了火山引擎生态,也为广大企业用户带来了更便捷的数字化工具,助力企业快速实现业务监控与优化。 从全球覆盖到本地深耕&#x…

计算机网络原理之HTTP与HTTPS

一、前言 为了理解HTTP,我们有必要事先了解一下TCP/IP协议簇。 通常我们使用的网络(包括互联网)是在TCP/IP协议簇的基础上运作的。而HTTP属于它内部的一个子集。 计算机与网络设备要相互通信,双方必须基于相同的方法。比如&#…

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示

目录 1、什么是注解的解析? 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类,使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…

15.三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&am…

03_Webpack模块打包工具

03_Webpack模块打包工具 目录 知识点自测 以下哪个选项是 ECMAScript 默认导出和导入的语法? A:export 和 require B:module.exports {} 和 import 变量名 C:export default 和 import 变量名 D:export 和 import {…

实验七 用 MATLAB 设计 FIR 数字滤波器

实验目的 加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 掌握 FIR 滤波器的快速卷积实现原理。 不同滤波器的设计方法具有不同的优…

day07 接口测试(2)

目录 1、接口用例设计 1.1 接口测试的测试点 1.1.1 功能测试 !! (1)单接口功能: (见1.3) (2)业务场景功能:(见1.4) 1.1.2 性能测试&#xf…

CentOS 二进制安装部署MongoDB 4.0

一、安装MongoDB 1. 下载 MongoDB 二进制文件 前往 MongoDB 官方下载页面(https://www.mongodb.com/try/download/community) 选择对应版本的 tar 包。 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz 2. 解压并移动至目标目录 解压文件&#xff…