程序员不得不学的操作系统知识

Posted 学编程的文若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员不得不学的操作系统知识相关的知识,希望对你有一定的参考价值。

计算机硬件


计算机的重要组成部分,包含了 5 个重要的组成部分:运算器、控制器、存储器、输入设备、输出设备。

  • ​运算器​​​:运算器最主要的功能是对数据和信息进行加工和运算。它是计算机中执行算数和各种逻辑运算的部件。运算器的基本运算包括加、减、乘、除、移位等操作,这些是由 ​​算术逻辑单元(ALU)​​ 实现的。而运算器主要由算数逻辑单元和寄存器构成。
  • ​控制器​​:指按照指定顺序改变主电路或控制电路的部件,它主要起到了控制命令执行的作用,完成协调和指挥整个计算机系统的操作。控制器是由程序计数器、指令寄存器、解码译码器等构成。

运算器和控制器共同组成了 CPU

  • ​存储器​​​:存储器就是计算机的​​记忆设备​​,可以保存信息。存储器分为两种,一种是主存,也就是内存,它是 CPU 主要交互对象,还有一种是外存,比如硬盘软盘等。
  • ​输入设备​​:输入设备是给计算机获取外部信息的设备,它主要包括键盘和鼠标。
  • ​输出设备​​:输出设备是给用户呈现根据输入设备获取的信息经过一系列的计算后得到显示的设备,它主要包括显示器、打印机等。
  • ​I/O 设备​​:Input/Output 设备是系统和外部世界的连接。
  • ​总线​​:贯穿整个系统的一组电子管道,通常被设计成用来传送定长的字节块,也就是字。字的大小与系统相关,比如在32位操作系统当中,一个字是4个字节。
  • ​主存​​​:主存是一个​​临时存储设备​​​,而不是永久性存储,磁盘是 ​​永久性存储​​ 的设备。主存既保存程序,又保存处理器执行流程所处理的数据。从物理组成上说,主存是由一系列动态随机存储构成的集合。
  • ​CPU​​:由**用于保存变量和临时结果的寄存器、程序计数器(下一条要执行的指令地址)、堆栈指针、PSW程序状态字寄存器(IO和系统调用常用到)**等寄存器组成。CPU 在指令的要求下会做如下操作:
  1. 加载:把一个字节或者一个字从主存复制到寄存器,以覆盖寄存器原来的内容
  2. 存储:把一个字节或者一个字从寄存器复制到主存的某个位置,以覆盖这个位置上原来的内容
  3. 操作:把两个寄存器的内容复制到 ALU,ALU 对这两个字做算术操作,并把结果存放到一个寄存器中,以覆盖寄存器原来的内容
  4. 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的内容。

程序员不得不学的操作系统知识(一)_运算器

计算机概念

计算机是由软件与硬件组成的,而硬件又包括了总线、I/O设备、主存以及处理器,其中信息是由位以及上下文表示的,而信息则是从I/O设备以位的形式通过总线进入主存,然后由处理器从主存将信息取出处理。

字与字长

指令集结构描述的是每条机器代码指令的效果,而微体系结构描述的是处理器实际上是如何实现的。

计算机一次处理的数据长度称为字,一个字通常由一个或多个字节构成,字的位数叫做字长。由于虚拟地址空间中的地址就是使用一个字来编码的,因此字长决定了系统的虚拟地址空间的最大大小。字长指的是CPU一次能并行处理的二进制位数。

对于跨越多个字节的程序对象来说,有两个问题:

  • 这个对象的地址是什么?
  • 在存储器中如何排列这些字节?

对象的地址:在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。

排列方式:

  • 小端法:按照从最低有效字节到最高有效字节的顺序存储对象,也就是最低有效字节在最前面。
  • 大端法:和小端法相反。是按照从最高有效字节到最低有效字节的顺序存储对象,也就是最高有效字节在最前面。

程序的运行

程序的编译:

预处理器、编译器、汇编器和链接器一起构成了编译系统。

程序员不得不学的操作系统知识(一)_主存_02

  • 预处理阶段:预处理器 cpp 根据以字符 # 开头的命令,修改原始的 C 程序,处理头文件使得引用代码插入源代码中,得到以 .i 作为文件扩展名的源程序。
  • 编译阶段:编译器 ccl 将文本文件 hello.i 翻译成文本文件 hello.s,它包含一个汇编语言程序,汇编语言程序中的每条语句都以一种标准的文本格式确切的描述一条低级机器语言指令。汇编语言能为不同高级语言的不同编译器提供通用的输出语言。
  • 汇编阶段:汇编器 as 将hello.s 翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在字节编码为机器码的hello.o 中。
  • 链接阶段:链接器 ld 就是负责处理相关调用,将相关调用的机器码合并到源文件中,结果就得到一个 hello 文件,它是一个可执行目标程序,可以被加载到内存中,由系统运行。

计算机组成预览:

程序员不得不学的操作系统知识(一)_运算器_03

一个程序的执行,是经历了预处理器、编译器、汇编器以及链接器的处理之后,才最终成为可执行的文件。

操作系统概念

概念

**操作系统是管理硬件和软件的一种应用程序。**是管理计算机硬件与软件资源的系统​​软件​​​,同时也是计算机系统的​​内核与基石​​。计算机有两种运行模式:内核态(管态和核心态)和用户态。操作系统提供了几种抽象模型:

  • 文件:对 I/O 设备的抽象
  • 虚拟内存:对程序存储器的抽象
  • 进程:对一个正在运行程序的抽象
  • 虚拟机:对整个操作系统的抽象

程序员不得不学的操作系统知识(一)_主存_04

主要功能

  • 处理器管理:进行相关的任务调度,解决处理其调度、分配、回收等。
  • 存储器管理:负责管理内存的分配、回收,在进程需要时分配内存以及完成时回收内存,协调内存资源。
  • 设备管理:根据确定的设备分配原则对设备进行分配,使设备与主机能够并行工作。
  • 文件管理:有效地管理文件的存储空间,合理地组织和管理文件系统,为文件访问和文件保护提供更有效的方法及手段。
  • 提供用户接口:提供了访问应用程序和硬件的接口,方便用户使用。

操作系统特性

操作系统还具有四个重要特性:并发性、共享性、虚拟性、异步性。

并发性

  • 并行是指两个或多个事件可以在同一时刻发生
  • 并发是指两个或多个事件可以在同一时间间隔刻发生

共享性

  • 共享性表现为操作系统中的资源可供多个并发的程序共同使用
  • 互斥共享:资源互斥访问
  • 同时访问:某一个资源在一段时间内并发地被多个程序访问,这种“同时”是宏观的

虚拟性

虚拟性表现为把一个物理实体转变为若干个逻辑实体。

  • 时空复用技术:在时间上复用,程序并发使用。
  • 物理设备虚拟为多个逻辑设备
  • 每个程序占用一个逻辑设备
  • 多个程序通过逻辑设备并发访问
  • 借助多道程序的技术
  • 为每道程序建立进程
  • 多个程序分时复用处理器
  • 虚拟处理器技术:
  • 虚拟设备技术:

  • 空分复用技术:实现虚拟磁盘、虚拟内存,提高资源利用率和编程效率。
  • 在逻辑上扩大了程序的存储容量,程序可以使用比实际内存大的空间(暂不需要的程序部分挂起在磁盘)
  • 将物理磁盘虚拟为多个逻辑磁盘
  • 虚拟磁盘技术:
  • 虚拟内存技术:

异步性

进程是以不可预知的速度向前推进的,不知道程序何时执行、何时暂停、何时完成,这么多的不可预知的事情,就导致了程序的异步性。

局部性原理

局部性原理指的是CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。这个原理也是使得虚拟内存技术可以实现的一个原因

因为有局部性原理

  • 所以计算机在加载程序时,无需全部逻辑空间装入内存,装载部分即可(需要使用的部分)
  • 如果发现所使用的内存不在物理内存中,则发出缺页中断,发起页面置换,把保存在辅存中的页面置换到物理内存中,这样程序又可以继续运行下去了
  • 从用户层面看,程序拥有很大的空间,既是虚拟内存

虚拟内存实际上是对物理内存的扩充,速度接近于内存,成本接近于辅存

了解更多文章,

以上是关于程序员不得不学的操作系统知识的主要内容,如果未能解决你的问题,请参考以下文章

线程学习知识点总结

android小知识点代码片段

那些不得不学的Linux命令「建议收藏」

收藏前端学习你不得不看的优质文章——补充前端知识,常看常新

在代码中寻找目标

一文学会 TypeScript 的 82% 常用知识点(下)