操作系统相关术语

术语 含义
Linux内核 负责进程管理,硬件驱动,内存管理等
Linux发行版 Linux内核+软件+x11桌面环境
阻塞 阻塞就是函数不返回,一直等待,这一般代表该线程没有其他事可做了
非阻塞 非阻塞是如果没拿到资源,就先返回做其他事,然后循环
字符型设备 输入输出都是字符,与之相对的是非字符型设备,如图形设备,二进制设备
SP Service Pack
shell 内核与用户之间的中间件,并且可以执行脚本
上下文 可以替换为”对象”
sdk 开发套件,至少包括API接口,有的还包括开发工具
平坦地址 即不分段的地址
不可执行权限 如果文件被标记为没有执行权限,那么代表着elf文件不能被操作系统解析,并且不会被加载到内存
动态链接 在执行到该段指令时链接
静态链接 在编译期链接
作业 一组相关的进程
port/portable 移植/可移植
open 一般是“创建”或“建立联系”的意思
前景色 抽象概念,会覆盖默认的字体颜色、线条颜色,而使用前景色在画布上画图
像素 像素是一个抽象概念,泛指一个基本显示单元,不同的显示器,像素大小不同
逻辑尺寸 以“毫米”等为单位,保证在各种设备上尺寸都相同
协议 协议代表着有至少两个对象要通信,然后协议就是规定了通信格式,也叫编码格式,因此有协议的地方必有至少两个对象,必有编码和解码。
编码 格式转换,按协议将原始格式的二进制转换为协议格式的二进制
解码 按协议以指定规则读取二进制数据
终端 输入设备和输出设备的统称
计算机 相对于终端是计算和存储单元
子系统 子系统是指,具有不同的执行环境、入口函数、启动选项和用户交换模式,在编译构造程序时需要通过/SUBSYSTE 选择指定应用程序的类型。
虚拟内存 虚拟内存由页表维护,页表左边是虚拟内存,页表右边是物理内存
用户态和内核态 见详细说明
MMU 处理虚拟地址到物理地址的转换
TLB 缓存虚拟地址到物理地址的映射关系
buffer 磁盘驱动维护的缓冲区
cache 文件系统维护的缓冲区
文件 文件是一个数据结构,或者说是一个对象,维护了inode号,读写权限,当前位置等
渲染 3D图像转2D图像的过程
prefix 前缀,多用于“路径”的意思
插件 本质是so,通过机制放在指定目录下,会被自动加载

链接器

链接器(Linker)是一种系统软件,主要用于将程序中的多个模块(Object File)连接起来,生成可执行文件或动态链接库(DLL)。它的主要作用有以下几个方面:

符号解析:在程序中,变量、函数、类等被定义时,它们通常会被分配一个符号(Symbol),链接器的任务是解析这些符号,找出每个符号的定义,确保每个符号只有一个定义,并将它们进行合并。

符号重定位:在链接过程中,如果发现某个符号的地址无法确定,链接器会为这些符号分配一个重定位表(Relocation Table),将这些符号的地址留给操作系统或动态链接器在程序运行时进行确定。

去重复和合并:链接器还会对多个模块中相同的代码或数据进行去重复和合并,减小程序的大小。

生成可执行文件或动态链接库:链接器最终的任务是将多个模块链接在一起,生成可执行文件或动态链接库,使程序能够被操作系统或动态链接器加载并执行。

总之,链接器是程序开发过程中非常重要的一环,它负责将多个模块合并为一个可执行文件或动态链接库,并确保各个模块之间的符号和地址的正确性,是保证程序正确运行的关键。

动态链接器

动态连接器(Dynamic Linker),也称为动态链接器,是一种系统软件,用于在程序运行时动态加载共享库(Shared Library)并链接其中的符号。它的主要作用有以下几个方面:

动态加载共享库:在程序运行时,动态连接器可以加载共享库,将其映射到进程的地址空间,并将共享库的符号表和重定位表加入到进程的符号表和重定位表中。

符号解析和重定位:动态连接器可以根据符号表和重定位表,解析和重定位程序中使用的符号,确保程序能够正确访问共享库中的函数和数据。

共享库的重复使用:由于多个程序可以共享同一个共享库,因此动态连接器可以减少程序的内存占用,提高系统的性能。

版本管理:动态连接器还可以管理共享库的不同版本,确保程序在不同的版本之间正确运行。

总之,动态连接器是现代操作系统中非常重要的一部分,它可以在程序运行时动态加载共享库,并将其链接到程序中,减少程序的内存占用,并提高系统的性能。动态连接器还能够处理共享库的版本管理,确保程序在不同版本的共享库之间正确运行。

十万个为什么

从用户态到内核态发生了什么?

切换到内核态时,需要用到以下内容:

内核栈:内核态使用的是自己的栈,当从用户态进入内核态时,需要将用户态栈的内容保存到内核栈中。

系统调用号:系统调用函数被调用时需要指定系统调用号,内核通过系统调用号来确定需要执行的系统调用函数。

参数传递:系统调用函数通常需要一些参数,这些参数需要从用户态传递到内核态。在x86架构上,通常使用寄存器来传递参数。

中断向量号:当CPU接收到一个中断请求时,需要通过中断向量号来确定中断处理函数。

内核态代码:在进入内核态后,CPU需要执行内核态的代码,这些代码通常被存放在内核空间中。

进程上下文:内核态中处理完中断或系统调用后,需要恢复进程原本的上下文,包括CPU寄存器、程序计数器、堆栈指针等,以便能够继续执行用户态程序。

在x86架构中,0-2级特权级被称为用户特权级(User mode),3级特权级被称为内核特权级(Kernel mode)。当CPU从用户态切换到内核态时,通常使用中断或异常处理程序来触发,此时CPU会将当前进程的特权级从用户态切换到内核态,即从3级切换到0级。这时候,CS和SS会切换到内核模式下的代码段和堆栈段。而通过0x80中断指令,实际上是触发了一个中断,然后CPU会跳转到中断处理程序,在这个处理程序中可以根据需要修改CS和SS,以及其他的寄存器值,从而控制特权级的切换。

用户态和内核态的区别是什么?

用户态和内核态是指操作系统中不同的特权级别,这两个特权级别有以下不同之处:

访问的资源不同:在用户态下,进程只能访问自己的地址空间,而不能访问操作系统的地址空间;而在内核态下,进程可以访问整个系统的资源,包括操作系统的地址空间和硬件资源等。

执行的指令不同:在用户态下,进程只能执行非特权指令,而不能执行特权指令,比如访问硬件、修改内存页表等;而在内核态下,进程可以执行特权指令,从而获得对系统资源的控制。

系统调用的方式不同:当一个进程在用户态下需要访问内核资源时,需要通过系统调用的方式,将控制权转移到内核态,由内核来完成相应的操作,然后将结果返回给用户态。而在内核态下,进程可以直接访问内核资源。

用户态和内核态的区别是什么?

用户态和内核态是指操作系统中不同的特权级别,这两个特权级别有以下不同之处:

访问的资源不同:在用户态下,进程只能访问自己的地址空间,而不能访问操作系统的地址空间;而在内核态下,进程可以访问整个系统的资源,包括操作系统的地址空间和硬件资源等。

执行的指令不同:在用户态下,进程只能执行非特权指令,而不能执行特权指令,比如访问硬件、修改内存页表等;而在内核态下,进程可以执行特权指令,从而获得对系统资源的控制。

特权指令是什么?

除了加法,减法、乘法、移位、逻辑运算等基本算术和逻辑指令都属于非特权指令。此外,还有一些数据传输指令、堆栈操作指令、控制转移指令等也是非特权指令。

在C语言中,除了系统调用,都可以视为在使用非特权指令。

双核CPU架构

操作系统相关术语_第1张图片

CPU缓存

操作系统相关术语_第2张图片

一级缓存包括指令缓存和数据缓存;

什么是GPU?

GPU(Graphics Processing Unit,图形处理器)是一种专门用于图形处理和加速的处理器,主要用于3D图形渲染、视频编解码、深度学习等领域。GPU的主要功能包括:

图形渲染:GPU可以通过对图形进行数学运算和图形数据处理来实现3D图形的渲染,从而在屏幕上显示出高质量的图像。

并行计算:GPU具有大量的计算单元和并行计算能力,可以加速大规模的并行计算任务,如机器学习、计算流体力学等。

视频编解码:GPU可以用于视频的编码和解码,可以加速视频的压缩、解码和处理,提高视频的播放流畅度和质量。

声音处理:GPU也可以用于音频的处理,如音频编码、解码、特效处理等。

虚拟现实:GPU可以提供高质量的图形渲染和3D图形加速,从而提高虚拟现实应用的体验和性能。

什么是渲染管线

渲染和渲染管线不是同一个意思。

渲染是指将3D图形转换成2D图像的过程,包括模型、光照、纹理等等。

渲染管线(Render Pipeline)是将渲染过程中的各个步骤有序地连接起来,以完成渲染的过程。渲染管线的步骤包括顶点着色器、几何着色器、光栅化、片段着色器、深度测试、透明度排序等等。渲染管线的设计和实现,对于渲染的性能和效果都有着非常重要的影响。

渲染管线可以有不同的流程?
是的,渲染管线可以有不同的流程,不同的图形API(如OpenGL、DirectX等)都有自己的渲染管线实现方式。此外,即使在同一种图形API下,不同的硬件或操作系统也可能会对渲染管线的实现方式有所不同。

着色器
着色器(Shader)是一种运行在显卡上的小型程序,它们被用于执行图形渲染的各个阶段,比如顶点处理、几何处理、像素处理等等。着色器在渲染管线的各个阶段中负责对图形进行不同的操作和处理,从而最终生成最终的渲染图像。

着色器通常用着色器语言编写,不同的API和显卡可能支持不同的着色器语言。目前,比较流行的着色器语言有OpenGL着色器语言(GLSL)、微软着色器语言(HLSL)和Khronos Group着色器语言(SPIR-V)等等。着色器语言通常具有一定的编程能力,可以进行数学计算、逻辑控制等等操作,以实现对图形的精细控制和处理。

代码是如何驱动硬件的?

  1. 首先要清楚,二进制代码是存放在硬件磁盘上的;
  2. 执行程序时,利用磁盘磁头判断0和1信息,并将信息转化为高低电平,发送给内存储存;
  3. CPU从内存读取信息后,通过高低电平传递给硬件,这期间会通过继电器方法电流,达到驱动硬件的目的。
  4. 所以整个过程都是电信号在传递信息。

你可能感兴趣的:(Linux开发,术语)