Lesson1 - 操作系统概述与硬件视角

news2024/10/5 17:41:49

文章目录

  • 什么是操作系统
    • 操作系统的形成
  • 从程序看OS
    • 提出问题:从hello world文件开始
    • 目前编译器帮我们解决了诸多问题
      • gcc的编译过程
  • CPU的运作
    • CPU对任务的切换


什么是操作系统

  • 操作系统 Operating System 是一组控制和管理计算机 硬件软件 资源合理地对各类作业进行 调度,方便用户使用计算机的程序集合。
  • 操作系统的核心目标是,使系统资源的利用率高,系统的吞吐量大。

操作系统的形成

用户想要调用硬件,需要使用硬件的驱动程序,那么如果换了硬件就需要更换驱动,这样可移植性差,于是出现了操作系统。
操作系统负责提供设备驱动框架来驱动不同的底层设备,同时提供了用户接口框架给上层用户。
后来操作系统一并将软件驱动纳入,形成软件操作系统。
在这里插入图片描述


从程序看OS

提出问题:从hello world文件开始

  1. hello world文件在磁盘中是怎么存储的?
    • 怎么存决定了怎么读
    • 利用文件系统
  2. .c文件怎么变成让CPU认识的指令的?
    2.1 是否这些指令所有CPU都认识呢?
    2.2 是否编译成0101这种二进制文件系统就能运行了呢?
    • 我们现在的编程大多是 基于OS的程序设计
    • 而还有一种就是裸机编程,程序可以不需要操作系统直接调动硬件
  3. 软件多次运行或者同时运行,CPU如何管理多个任务的?
  4. 对于运行时的数据如何进行内存存放,内存如何管理?

总结下来就是,操作系统如何进行:

  • 管理CPU —— 进程和线程 —— 调度与同步机制
  • 管理内存 —— 内存管理
  • 管理磁盘 —— 文件系统
  • 管理IO —— IO设备

目前编译器帮我们解决了诸多问题

编译器帮助我们解决了前两个问题:管理CPU和管理内存。

  • 调用进程线程来运行程序
  • 编译器链接内存地址

调用指令

gcc -v

可以看到如下信息:

目标:x86_64-redhat-linux

说明gcc编译的指令集是面向x86架构的CPU,作用于linux操作系统的
gcc(编译器)解决了文件对于不同架构的CPU与不同的操作系统的问题。

gcc的编译过程

指令:

gcc helo.c -E -o a.i	# 将hello.c文件预处理
gcc a.i -S -o a.s		# 对预处理后的文本文件进行编译
gcc a.s -c -o a.o		# 对汇编文件进行汇编,生成二进制文件
gcc a.o -o a.out		# 对各种库和文件进行链接,生成可执行文件

cc1 hello.c -o /tmp/cceVNE1I.s            		# 编译器ccl  gcc -S
as -o /tmp/cc8ATX9H.o /tmp/cceVNE1I.s			# 汇编器as  gcc -c
ld -o build /tmp/cc8ATX9H.o  ...../*.o   -lc   	# 链接器ld  gcc

指令:

file a.out

可以调出可执行文件适用的CPU,操作系统等信息


CPU的运作

在这里插入图片描述
CPU通过缓存对内存进行调度,其中,内存分为两种:

  • 数据内存:存放数据。
  • 控制器
    • 在硬件通信中,需要高低电压的信号来互相通信,而高低电压的持续时间需要软件控制,而代码中会需要进行休眠来控制电压持续时间,如果CPU自己来做,就会造成CPU休眠(死机),所以创造出了控制器。
    • CPU告诉控制器,我需要什么类型的信号,由控制器进行操作,这样就能让CPU在控制器发信号和休眠的时间内做其他事情了。

CPU对任务的切换

CPU在执行程序的时候,如何实现对任务的切换呢?

例如,对一个C程序:

#include <stdio.h>

int reslut() {
	int a = 1;
	int b = 2;
	return a + b;
}

int main() {
	int k = reslut();
	return 0;
}
  1. CPU开始执行main()
  2. 跳转到reslut()
  3. 在CPU的寄存器内记录下a, b的数据,然后进行运算
  4. 跳转回main()

那CPU是怎么知道要跳转到哪里的?

  • CPU的寄存器中有一个名叫程序计数器(Program Counter, PC),程序计数器指示了下一条需要从内存中提取的指令的地址。当指令被提取后,程序计数器会自动更新为下一条需要提取的指令的地址,从而确保指令能够按正确的顺序执行。
  • 另一个重要的寄存器是 栈指针(Stack Pointer, SP)。栈指针指向内存中当前栈的顶端。它包含了函数调用过程中传递的参数、局部变量以及未保存在寄存器中的临时变量。通过堆栈指针,CPU可以管理函数调用期间的数据和返回地址。
  • 在进行多任务时,由于CPU内寄存器只有那么多,所以在切换任务前,PC 指针会保存当前任务的下一条语句的地址,然后将栈指针SP以及栈内的数据保存到内存的TCB任务控制块中,之后再跳转到另一个任务中。在任务完毕时,根据PC指针位置跳转,然后将对应数据从内存下载到栈内,这就是CPU和内存间的load/store操作。
    • 任务切换,也称上下文切换(Context Switch)

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

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

相关文章

深入理解NumPy库:常用函数详解与数组操作指南

在数据科学和数值计算领域&#xff0c;NumPy无疑是一个强大的工具&#xff0c;它为Python提供了高效的多维数 组处理能力。无论是进行数据分析、构建机器学习模型&#xff0c;还是进行复杂的科学计算&#xff0c;NumPy都是 不可或缺的核心库之一。 numpy.array 是 NumPy 库中…

Python 从入门到实战34(实例2:绘制蟒蛇)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…

C语言指针plus版练习

上期我们讲了进阶的指针&#xff0c;本期内容我们来强化一下上期学的内容 一、字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 1.1 分析题目 假设字符串为abcde&#xff0c;左旋一个以后就变成bcdea&#xff0c;就是把第一个字符移到一个新的变量里面&#…

5G NR BWP 简介

文章目录 BWP介绍BWP 分类BWP相关总结 BWP介绍 5G NR 系统带宽比4G LTE 大了很多&#xff0c;4G LTE 最大支持带宽为20MHz&#xff0c; 而5G NR 的FR1 最大支持带宽为100MH在&#xff0c; FR2 最大支持带宽为 400MH在。带宽越大&#xff0c;意味了终端功耗越多。为了减少终端的…

哪款百元头戴式耳机性价比高?四款大火爆全网的机型盘点推荐!

在繁忙的生活节奏中&#xff0c;寻找一片属于自己的宁静空间&#xff0c;成为了许多人的内心渴望。头戴式降噪耳机&#xff0c;正是那把打开音乐世界的钥匙。它不仅能够隔绝外界的喧嚣&#xff0c;还能将您带入一个纯净无瑕的音乐世界。无论是沉浸在古典乐的悠扬旋律中&#xf…

数据服务-存储服务(NFS)

1.概述 存储: 用于存放用户上传的内容(数据),一般应用在网站集群中 如果不使用存储,用户上传的数据就直接存放在网站服务器上了,用户下次访问就可能找不到 如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储. 位置: 网站后排. 2. 存储分类 分类说明硬件存储硬件…

【高等数学学习记录】函数的极限

一、知识点 &#xff08;一&#xff09;知识结构 #mermaid-svg-Dz0Ns0FflWSBWY50 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Dz0Ns0FflWSBWY50 .error-icon{fill:#552222;}#mermaid-svg-Dz0Ns0FflWSBWY50 .erro…

KiCad 综合笔记

开窗 选中顶层或者底层 Mask 层,然后进行覆铜: 四层板 KiCad Tutorial - How to make a 4 layer PCB https://bbs.elecfans.com/jishu_2365544_1_1.html 虽然在“电路板设置”中,可以选择铜层的类型,但如果选择了“电源层”,除了用于告诉“Free router”布线器在自动布…

vue3+vite@4+ts+elementplus创建项目详解

1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置&#xff1a; 找到项目路径下的package.json目录下找到script对象下面添加一下代码&#xff1a; "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是&#xff1a;cnpm run serve 3…

Linux中的进程信号

目录 进程信号 kill/raise/abort 硬件异常产生信号 由软件条件产生信号 信号在内核中的表示示意图 pending: block: 信号集操作函数 sigprocmask 进程信号 信号量和信号不同 信号量的本质是计数器&#xff0c;计数器可以被多进程同时看到。可以对资源进行预定。 所有进…

OpenJudge | 置换选择排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给定初始整数顺串&#xff0c;以及大小固定并且初始元素已知的二叉最小堆&#xff08;为完全二叉树或类似完全二叉树&#xff0c;且父元素键值总小于等于任何一个子结点的键值&#xff09;&#xff0c;要求利用堆实现置换选择排序&a…

程序员如何在 AI 时代保持核心竞争力

前言 随着 AIGC 大语言模型的不断涌现&#xff0c;AI 辅助编程工具的普及正在深刻改变程序员的工作方式。在这一趋势下&#xff0c;程序员面临着新的挑战与机遇&#xff0c;需要思考如何应对以保持并提升自身的核心竞争力。 目录 一、AI 对编程工作的影响 &#xff08;一&…

一、走进新语言

走进新语言 介绍环境配置JDK配置Kotlin配置 开发工具代码基本结构程序注释 介绍 Kotlin是一种现代但已经成熟的编程语言&#xff0c;旨在让开发人员更快乐。它简洁、安全、可与Java和其他语言互操作&#xff0c;并提供了许多在多个平台之间重用代码的方法。它由JetBrains公司于…

2.JUC

掌握 Java 并发编程&#xff0c;熟悉线程池、并发容器以及锁的机制&#xff0c;如 sychronized、ReentrantLock、AQS等。 2.0 并发基础 线程等待唤醒机制LockSupport (3种) 方式一&#xff1a;使用Object中的wait()方法让线程等待&#xff0c;使用Object中的notify()方法唤醒…

数据结构 ——— 单链表oj题:链表分割(带哨兵位单向不循环链表实现)

目录 题目要求 手搓简易单链表 代码实现 题目要求 现有一链表的头指针 ListNode* head &#xff0c;给一定值 x &#xff0c;编写一段代码将所有小于 x 的节点排在其余节点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头节点 举例说明&a…

【包教包会】2D图片实现3D透视效果(支持3.x、支持原生、可合批)

将去年写的SpriteFlipper从2.x升级到3.x。 如果需要2.x版本或需要了解算法思路&#xff0c;请移步&#xff1a;https://blog.csdn.net/weixin_42714632/article/details/136745051 优化功能&#xff1a;可同时绕X轴和Y轴旋转&#xff0c;两者效果会叠加。 完美适配Web、原生…

typescript使用webpack打包编译问题

解决方案&#xff1a;在webpack.config.js中的mdule.exports中设置mode。 再次运行npm run start即可。

Python基本库的使用--urllib

开篇 本篇文章旨在总结urlib基本库的一些常用用法。 相关方法 urlopen 用户打开和读取URL。 import urllib.requestresponse urllib.request.urlopen(https://www.python.org) print(response.read().decode(utf-8))带data参数 import urllib.parse import urllib.requestda…

【计算复杂性理论】P可归约(归约,P-reducible)与P、NP、NP-Hard、NP-Complete问题

1 问题背景 如果想要了解P问题、NP问题、NP-Hard问题、NP-Complete问题之间的关系&#xff0c;那就需要从了解NP-complete问题和归约概念开始。上一篇文章中&#xff0c;我们介绍了计算复杂性理论的奠基之作《The Complexity of Theorem-Proving Procedures》&#xff0c;在这篇…

初识算法 · 滑动窗口(1)

目录 前言&#xff1a; 长度最小的子数组 题目解析 算法原理 算法编写 无重复长度的最小字符串 题目解析 算法原理 算法编写 前言&#xff1a; 本文开始&#xff0c;介绍的是滑动窗口算法类型的题目&#xff0c;滑动窗口本质上其实也是双指针&#xff0c;但是呢&#…