Linux操作系统基础原理

Linux操作系统基础原理操作系统基础原理计算机自身是由众多电子元器件构成 硬件本身提供给用户的接口十分底层复杂 使用很不方便 在硬件之上的操作系统将硬件接口抽象封装为比较直观 用户容易调用的接口 用户开发应用程序 通过指令代码调用这些接口完成任务 狭义的操作系统主要指系统内核 内核有以下作用 进程管理 文件系统 网络管理 内存管理 驱动程序 安全功能 内核可以将用户无法操作的底层硬件接口进行抽象并封装为用户可以操作

计算机系统

在这里插入图片描述

1.计算机体系层次

2.计算机硬件

计算机5大基本部件:运算器、控制器(运算器和控制器都在CPU内部)、存储器、输入设备、输出设备,设备之间通过总线进行连接。
计算机总线按照其功能主要分为3种:
数据总线:传输指令和数据信息
地址总线:传输地址信息,一般是存放数据的内存地址
控制总线:传输控制信号和时钟信号
通常讲32位或64位机,是指其地址总线位数是32位或64位。32位地址总线,其最大内存寻址空间位2^32,1024✖1024✖1024✖4=4GB。计算机主板上并不是全都有这3种总线,CPU通过控制器可以控制当前总线是什么功能。
在这里插入图片描述
各部件性能:CPU(寄存器)>一级缓存>二级缓存>三级缓存>内存>SSD硬盘>机械硬盘,一般每一颗核心都有自己的一级,二级缓存,各核心共享三级缓存。衡量一个CPU性能,不光看工作频率,缓存也是非常重要的指标。两颗相同频率,一级,二级缓存不同的CPU在造价上是有天壤之别。






2.1 CPU

CPU的执行指令大致分为3步骤:从内存中取指令、解码指令、执行指令,与之对应在CPU上分为3个单元:取指单元、解码单元、执行单元。为了实现高性能,这些单元都不止一个。
CPU内部有保存关键变量和临时数据的存储器,称为寄存器。寄存器性能很高,和CPU工作频率相当,在CPU内部总线上完成数据操作。

2.1.1 CPU与多线程
2.1.2 CPU缓存

CPU的寄存器的空间很小,而且主要用来存放程序执行中产生的临时数据,所以CPU不得不借助内存来存放程序指令,但是内存的运行速度低于CPU,造成二者之间运行不协调,CPU需要为内存等待多个时钟周期,造成了CPU性能浪费,这种情况下在CPU和内存之间加入中间层来解决。理论依据是程序的局部性原理:1、空间局部性,指一个指令或数据被访问到,它附近的数据也可能会被访问;2、时间局部性,指一个指令或数据被访问执行之后,可能会被再次访问到。正是局部性原理的存在,导致了CPU可以使用缓存来存放这些数据,所以在CPU上出现了一级、二级、三级缓存,这大大提高了程序的执行速度。内存是以时间换空间,增加了存储能力,但消耗了CPU时钟;而缓存是以空间换时间,通过增加存储来换取程序更快的执行时间。

2.1.3 NUMA结构
2.1.4 通写与回写

CPU只能操作寄存器的数据,如果寄存器中没有,需要从缓存,或者内存甚至IO设备上获取。数据修改后,写入到内存才认为是修改完成。为了保证尽快写到内存,通常有2中策略:通写(write through)和回写(write back)
通写,将数据依次从一级、二级、三级缓存,最终写到内存。整个过程由CPU控制,CPU不能做别的事情。
回写,数据写入一级缓存,便告诉CPU写入完成,CPU可以去做别的事情。
通写数据可靠性高,回写性能高。按需选择,没有绝对的统一法则。
事实上,硬盘存储也遵循通写与回写策略。硬盘回写,是由内核控制将内存中的数据移动到硬盘缓存,便认为写入完成;后续由硬盘控制器将缓存中的数据移动到硬盘自身。硬盘通写,内核控制将数据写入到硬盘缓存,再写到硬盘,才认为写入完成。



2.1.5 用户态与内核态

用户开发的应用程序都是工作在操作系统之上的,不属于操作系统内部。系统内核之上的空间称为用户空间(用户态),内核自身称为内核空间(内核态)。不论用户程序还是内核指令,执行时加载到CPU然后运行。CPU在生产过程中,研制人员开发了CPU能够执行的众多指令,这些CPU支持的所有指令的集合称为CPU的指令集。CPU的指令主要分为4个层次,即环0、环1、环2、环3,每个环对应了不同层次的指令。以Intel的X86指令架构CPU为例,主要使用环0和环3两个层次,环3上是用户可以执行的指令,相当于用户空间;环0上为特权指令,相当于内核空间用户不能直接操作。例如操作硬件,这是个特权操作,用户不可以执行,必须向内核申请,即发起系统调用,由内核执行,完成后将结果返回给用户程序。对于计算机的所有特权操作都必须由内核承担,内核最重要的一个功能就是管理硬件资源
程序员编写的代码其实就是一条条指令构成,程序代码在执行过程中,如果这条指令用户自身有权限去执行,则可以直接执行。如果需要执行特权指令,只能由内核执行,用户没有权限执行;此时要向内核发起系统调用,内核执行系统调用的代码,完成后将执行结果返回给执行的程序,然后再继续执行后面的指令。内核在运行系统调用代码时,程序是处在等待状态。执行系统调用时,程序工作在内核空间(内核态);运行用户可以执行的指令时,程序工作在用户空间(用户态)。
应用程序在工作过程中,就是不断在用户态和内核态之间做模式切换,需要执行特权命令就发起系统调用,陷入内核态,当内核执行系统调用完毕后再返回用户态。所以内核或者系统调用并不直接发挥生产力,它更多是在底层提供支撑,帮助用户完成其特定功能,只有用户自己的程序才具有生产力,才能真正实现用户自己的目标。 一个有效率的程序,它不应该浪费太多时间在系统调用。一般CPU应该至少有70%的时间在执行用户代码(即工作在用户态),不多于30%的时间用来执行系统调用(工作在内核态)。

2.1.6 保护现场与恢复现场

CPU是通过给不同的程序分配时间片(time slice)来完成多任务运行,给每一个程序分配独立的时间片。在执行过程中,很产生很多中间状态数据,例如执行到第几条指令,接下来CPU该去取第几条指令,这些数据存放在CPU的指令指针寄存器中。如果此时发生了进程切换,寄存器的数据就会被新的进程所覆盖,等到下次再执行相同程序时又得从头再来,这是所不能接受的。所以一旦程序在一个时间片内没有办法执行完毕,CPU需要把程序执行的中间状态的数据保存起来,例如当前运行到哪个指令,在内存中取数据取到哪个地址,这称为保存现场。保存完成后,在下一个时间片执行另一个进程。当重新恢复执行当前进程时,需要把保存的中间数据装载到CPU中,称为恢复现场。保存和恢复现场需要执行内核代码完成(即工作在内核空间,所以也会消耗CPU时间),CPU中断一个进程的执行转而去执行另一个进程又称为上下文切换context switch。保存现场的数据存放在内存中,内核为每一个进程创建一个结构体的数据结构进行存放,称为任务结构体task struct,这里面存放了进程的各种信息,例如PID号、进程状态、父子进程关系、优先级、虚拟内存、程序计数器、CPU使用时间等等,当然也包含进程执行的中间状态数据。

2.2 内存

在这里插入图片描述
共享库文件通常是系统下lib或lib64中的.so文件,为了节约空间,只在内存中装入一份

2.3 输入输出IO

同步和异步是站在被调用者的角度,关心如何将结果返回给调用者 阻塞和非阻塞是站在被调用者的角度,关心在调用结果返回之前,调用者处于什么状态

以一次磁盘read操作为例,当用户进程发起IO请求后,分为2个过程。内核收到请求,将数据从磁盘拷贝到内核内存当中;进程不可能访问内核内存,所以第二步是数据从内核内存拷贝到进程内存。真正被称为IO的步骤是数据从内核内存到进程内存。

nginx设计之初就采用基于事件驱动IO,边缘触发,同时支持异步IO,所以性能很高。httpd在2.4版本后也开始支持event事件驱动IO模型

3. 操作系统的抽象

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227630.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午8:52
下一篇 2026年3月16日 下午8:52


相关推荐

  • idea2022.01激活码最新-激活码分享2022.01.18

    (idea2022.01激活码最新)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    187
  • ClientScriptManager.RegisterStartupScript.

    ClientScriptManager.RegisterStartupScript.当我们要注册一个在页面启动的脚本时,我们会用ClientScriptManager.RegisterStartupScript。比如<%@PageLanguage=”C#”%><!DOCTYPEhtmlPUBLIC”-//W3C//DTDXHTML1.0Transitional//EN””http://www.w3.org/TR/xhtml1/D…

    2022年7月20日
    18
  • css模糊遮罩效果_CSS 半透明遮罩层「建议收藏」

    css模糊遮罩效果_CSS 半透明遮罩层「建议收藏」很多时候,我们需要通过一层半透明的遮罩层来把后面的一切整体调暗,以便凸显某个特定的UI元素,引导用户关注,比如弹出层或者交互指南。这个效果的传统方法就是增加一个额外的HTML元素用于遮挡背景添加如下样式:.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.8);}.lig…

    2022年7月13日
    107
  • iOS锁屏时钟_ios时钟怎么调

    iOS锁屏时钟_ios时钟怎么调当设备在一定时间内没有触控动作,iOS会锁住屏幕。但有些应用程序是不需要锁住屏幕的,比如游戏,视频这类应用。可以通过设置UIApplication的idleTimerDisabled属性来指定iOS是否锁频://禁用休闲时钟[[UIApplicationsharedApplication]setIdleTimerDisabled:YES]; //也可以使用这种语法

    2026年4月15日
    4
  • 自动编码器及其变种

    自动编码器及其变种自动编码器  三层网络结构:输入层,编码层(隐藏层),解码层。  训练结束后,网络可由两部分组成:1)输入层和中间层,用这个网络对信号进行压缩;2)中间层和输出层,用这个网络对压缩的信号进行还原。图像匹配就可以分别使用,首先将图片库使用第一部分网络得到降维后的向量,再讲自己的图片降维后与库向量进行匹配,找出向量距离最近的一张或几张图片,直接输出或还原为原图像再匹配。  该网络的目的是重…

    2022年5月20日
    43
  • oracle数据库用户密码过期后怎么修改_oracle数据库密码过期怎么修改

    oracle数据库用户密码过期后怎么修改_oracle数据库密码过期怎么修改问题现象:今天在更改数据库数据的时候,程序报错了,如下:ORA-28001:thepasswordhasexpired问题分析:很显然,报错原因就是:密码已过期!所以现在需要做的事情只有两件:1.修改密码的过期时间2.修改/重置密码这里分析一下为什么要这样做:1.修改密码的过期时间:这是因为OracleDatabase11g版本的Oracle数据库有一项默认配置,就是密码过期时间默认为180天(6个月左右);通过sysdba身份可以登录..

    2022年7月28日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号