程序员必须了解的一些概念
操作系统(Operating System,OS)
操作系统(Operating System,OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
Shell
它是一个程序,可从键盘获取命令并将其提供给操作系统以执行。在过去,它是类似 Unix 的系统上唯一可用的用户界面。如今,除了命令行界面(CLI)外,我们还具有图形用户界面(GUI)。
GUI (Graphical User Interface)
GUI (Graphical User Interface)是一种用户界面,允许用户通过图形图标和音频指示符与电子设备进行交互。
内核模式(kernel mode)
内核模式(kernel mode)通常也被称为超级模式(supervisor mode),在内核模式下,正在执行的代码具有对底层硬件的完整且不受限制的访问。它可以执行任何 CPU 指令并引用任何内存地址。内核模式通常保留给操作系统的最低级别,最受信任的功能。内核模式下的崩溃是灾难性的;他们将停止整个计算机。超级用户模式是计算机开机时选择的自动模式。
用户模式(user node)
当操作系统运行用户应用程序(例如处理文本编辑器)时,系统处于用户模式。当应用程序请求操作系统的帮助或发生中断或系统调用时,就会发生从用户模式到内核模式的转换。在用户模式下,模式位设置为1。从用户模式切换到内核模式时,它从1更改为0。
计算机架构(computer architecture)
在计算机工程中,计算机体系结构是描述计算机系统功能,组织和实现的一组规则和方法。它主要包括指令集、内存管理、I/O 和总线结构。
SATA(Serial ATA)
串行 ATA (Serial Advanced Technology Attachment),它是一种电脑总线,负责主板和大容量存储设备(如硬盘及光盘驱动器)之间的数据传输,主要用于个人电脑。
复用(multiplexing)
复用也称为共享,在操作系统中主要指示了时间和空间的管理。对资源进行复用时,不同的程序或用户轮流使用它。他们中的第一个开始使用资源,然后再使用另一个,依此类推。
大型机(mainframes)
大型机是一类计算机,通常以其大尺寸,存储量,处理能力和高度的可靠性而著称。它们主要由大型组织用于需要大量数据处理的关键任务应用程序。
批处理(batch system)
批处理操作系统的用户不直接与计算机进行交互。每个用户都在打孔卡等脱机设备上准备工作,并将其提交给计算机操作员。为了加快处理速度,将具有类似需求的作业一起批处理并成组运行。程序员将程序留给操作员,然后操作员将具有类似要求的程序分批处理。
多处理系统(Computer multitasking)
多处理系统是指计算机同时运行多个程序的能力。多任务的一般方法是运行第一个程序的一段代码,保存工作环境;再运行第二个程序的一段代码,保存环境;……恢复第一个程序的工作环境,执行第一个程序的下一段代码。
分时系统(Time-sharing)
在计算中,分时是通过多程序和多任务同时在许多用户之间共享计算资源的一种系统。
相容分时系统(Compatible Time-Sharing System)
最早的分时操作系统,由美国麻省理工学院计算机中心设计。
云计算(cloud computing)
云计算是计算机系统资源(尤其是数据存储和计算能力)的按需可用性,而无需用户直接进行主动管理。这个术语通常用于描述 Internet 上可供许多用户使用的数据中心。如今占主导地位的大型云通常具有从中央服务器分布在多个位置的功能。如果与用户的连接相对较近,则可以将其指定为边缘服务器。
UNIX 操作系统
UNIX 操作系统,是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统。
UNIX System V
是 UNIX 操作系统的一个分支。
BSD(Berkeley Software Distribution)
UNIX 的衍生系统。
POSIX
可移植操作系统接口,是 IEEE 为要在各种 UNIX 操作系统上运行软件,而定义API的一系列互相关联的标准的总称。
MINIX
是一个迷你版本的类 UNIX 操作系统。
Linux
终于到了大名鼎鼎的 Linux 操作系统了,太强大了,不予以解释了,大家都懂。
DOS (Disk Operating System)
磁盘操作系统(缩写为DOS)是可以使用磁盘存储设备(例如软盘,硬盘驱动器或光盘)的计算机操作系统。
MS-DOS(MicroSoft Disk Operating System)
一个由美国微软公司发展的操作系统,运行在Intel x86个人电脑上。它是DOS操作系统家族中最著名的一个,在Windows 95以前,DOS是IBM PC及兼容机中的最基本配备,而MS-DOS则是个人电脑中最普遍使用的DOS操作系统。
MacOS X
macOS 是苹果公司推出的基于图形用户界面操作系统,为 Macintosh 的主操作系统。
Windows NT(Windows New Technology)
是美国微软公司 1993 年推出的纯 32 位操作系统核心。
Service Pack(SP)
是程序的更新、修复和(或)增强的集合,以一个独立的安装包的形式发布。许多公司,如微软或Autodesk,通常在为某一程序而做的修补程序达到一定数量时,就发布一个Service Pack。
数字版权管理(DRM)
它是工具或技术保护措施(TPM)是一组访问控制技术,用于限制对专有硬件和受版权保护的作品的使用。
x86
x86是一整套指令集体系结构,由 Intel 最初基于 Intel 8086 微处理器及其 8088 变体开发。采用内存分段作为解决方案,用于处理比普通 16 位地址可以覆盖的更多内存。32 位是 x86 默认的位数,除此之外,还有一个 x86-64 位,是x86架构的 64 位拓展,向后兼容于 16 位及 32 位的 x86架构。
FreeBSD
FreeBSD 是一个类 UNIX 的操作系统,也是 FreeBSD 项目的发展成果。
X Window System
X 窗口系统(X11,或简称X)是用于位图显示的窗口系统,在类 UNIX 操作系统上很常见。
Gnome
GNOME 是一个完全由自由软件组成的桌面环境。它的目标操作系统是Linux,但是大部分的 BSD 系统亦支持 GNOME。
网络操作系统(network operating systems)
网络操作系统是用于网络设备(如路由器,交换机或防火墙)的专用操作系统。
分布式网络系统(distributed operating systems)
分布式操作系统是在独立,网络,通信和物理上独立计算节点的集合上的软件。它们处理由多个CPU服务的作业。每个单独的节点都拥有全局集合操作系统的特定软件的一部分。
程序计数器(Program counter)
程序计数器是一个 CPU 中的寄存器,用于指示计算机在其程序序列中的位置。
堆栈寄存器(stack pointer)
堆栈寄存器是计算机 CPU 中的寄存器,其目的是跟踪调用堆栈。
程序状态字(Program Status Word)
它是由操作系统维护的8个字节(或64位)长的数据的集合。它跟踪系统的当前状态。
流水线(Pipeline)
在计算世界中,管道是一组串联连接的数据处理元素,其中一个元素的输出是下一个元素的输入。流水线的元素通常以并行或按时间分割的方式执行。通常在元素之间插入一定数量的缓冲区存储。
超标量(superscalar)
超标量 CPU 架构是指在一颗处理器内核中实行了指令级并发的一类并发运算。这种技术能够在相同的CPU主频下实现更高的 CPU 流量。
系统调用(system call)
指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态运行。如设备 IO 操作或者进程间通信。
多线程(multithreading)
是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因为有硬件支持而能够在同一时间执行多个线程,进而提升整体处理性能。
CPU 核心(core)
它是 CPU 的大脑,它接收指令,并执行计算或运算以满足这些指令。一个 CPU 可以有多个内核。
图形处理器(Graphics Processing Unit)
图形处理器又称显示核心、视觉处理器、显示芯片或绘图芯片;它是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。
存储体系结构
顶层的存储器速度最高,但是容量最小,成本非常高,层级结构越向下,其访问效率越慢,容量越大,但是造价也就越便宜。
高速缓存行(cache lines)
其实就是把高速缓存分割成了固定大小的块,其大小是以突发读或者突发写周期的大小为基础的。
缓存命中(cache hit)
当应用程序或软件请求数据时,会首先发生缓存命中。首先,中央处理单元(CPU)在其最近的内存位置(通常是主缓存)中查找数据。如果在缓存中找到请求的数据,则将其视为缓存命中。
L1 cache
一级缓存是 CPU 芯片中内置的存储库。L1缓存也称为主缓存,是计算机中最快的内存,并且最接近处理器。
L2 cache
二级缓存存储库,内置在 CPU 芯片中,包装在同一模块中,或者建在主板上。L2 高速缓存提供给 L1 高速缓存,后者提供给处理器。L2 内存比 L1 内存慢。
L3 cache
三级缓存内置在主板上或CPU模块内的存储库。L3 高速缓存为 L2 高速缓存提供数据,其内存通常比 L2 内存慢,但比主内存快。L3 高速缓存提供给 L2 高速缓存,后者又提供给 L1 高速缓存,后者又提供给处理器。
RAM(Random Access Memory)
随机存取存储器,也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它与 ROM 的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。RAM 在计算机和数字系统中用来暂时存储程序、数据和中间结果。
ROM (Read Only Memory)
只读存储器是一种半导体存储器,其特性是一旦存储数据就无法改变或删除,且内容不会因为电源关闭而消失。在电子或电脑系统中,通常用以存储不需经常变更的程序或数据。
EEPROM (Electrically Erasable PROM)
电可擦除可编程只读存储器,是一种可以通过电子方式多次复写的半导体存储设备。
闪存(flash memory)
闪存是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。这种科技主要用于一般性数据存储,以及在电脑与其他数字产品间交换传输数据,如储存卡与U盘。
SSD(Solid State Disks)
固态硬盘,是一种主要以闪存作为永久性存储器的电脑存储设备。
虚拟地址(virtual memory)
虚拟内存是计算机系统内存管理的一种机制。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。
MMU (Memory Management Unit)
内存管理单元,有时称作分页内存管理单元。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制等。
context switch
上下文切换,又称环境切换。是一个存储和重建 CPU 状态的机制。要交换 CPU 上的进程时,必需先行存储当前进程的状态,然后再将进程状态读回CPU中。
驱动程序(device driver)
设备驱动程序,简称驱动程序(driver),是一个允许高级别电脑软件与硬件交互的程序,这种程序创建了一个硬件与硬件,或硬件与软件沟通的接口,经由主板上的总线或其它沟通子系统与硬件形成连接的机制,这样使得硬件设备上的数据交换成为可能。
忙等(busy waiting)
在软件工程中,忙碌等待也称自旋,是一种以进程反复检查一个条件是否为真的条件,这种机制可能为检查键盘输入或某个锁是否可用。
中断(Interrupt)
通常,在接收到来自外围硬件(相对于中央处理器和内存)的异步信号,或来自软件的同步信号之后,处理器将会进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个运行信息切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为 CPU 指令集中的一个指令,以可编程的方式直接指示这种运行信息切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是即时系统中尤为有用。
中断向量(interrupt vector)
中断向量位于中断向量表中。中断向量表(IVT)是将中断处理程序列表与中断向量表中的中断请求列表相关联的数据结构。中断向量表的每个条目(称为中断向量)都是中断处理程序的地址。
DMA (Direct Memory Access)
直接内存访问,直接内存访问是计算机科学中的一种内存访问技术。它允许某些电脑内部的硬件子系统(电脑外设),可以独立地直接读写系统内存,而不需中央处理器(CPU)介入处理 。
总线(Bus)
总线(Bus)是指计算机组件间规范化的交换数据的方式,即以一种通用的方式为各组件提供数据传送和控制逻辑。
PCIe (Peripheral Component Interconnect Express)
官方简称PCIe,是计算机总线的一个重要分支,它沿用现有的PCI编程概念及信号标准,并且构建了更加高速的串行通信系统标准。
DMI (Direct Media Interface)
直接媒体接口,是英特尔专用的总线,用于电脑主板上南桥芯片和北桥芯片之间的连接。
USB(Universal Serial Bus)
是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。
BIOS(Basic Input Output System)
是在通电引导阶段运行硬件初始化,以及为操作系统提供运行时服务的固件。它是开机时运行的第一个软件。
硬实时系统(hard real-time system)
硬实时性意味着你必须绝对在每个截止日期前完成任务。很少有系统有此要求。例如核系统,一些医疗应用(例如起搏器),大量国防应用,航空电子设备等。
软实时系统(soft real-time system)
软实时系统可能会错过某些截止日期,但是如果错过太多,最终性能将下降。一个很好的例子是计算机中的声音系统。
进程(Process)
程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。若进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或异步的方式独立运行。
地址空间(address space)
地址空间是内存中可供程序或进程使用的有效地址范围。也就是说,它是程序或进程可以访问的内存。存储器可以是物理的也可以是虚拟的,用于执行指令和存储数据。
进程表(process table)
进程表是操作系统维护的数据结构,该表中的每个条目(通常称为上下文块)均包含有关进程的信息,例如进程名称和状态,优先级,寄存器以及它可能正在等待的信号灯。
命令行界面(command-line interpreter)
是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
进程间通信(interprocess communication)
指至少两个进程或线程间传送数据或信号的一些技术或方法。
超级用户(superuser)
也被称为管理员帐户,在计算机操作系统领域中指一种用于进行系统管理的特殊用户,其在系统中的实际名称也因系统而异,如 root、administrator 与supervisor。
目录(directory)
在计算机或相关设备中,一个目录或文件夹就是一个装有数字文件系统的虚拟容器。在它里面保存着一组文件和其它一些目录。
路径(path name)
路径是一种电脑文件或目录的名称的通用表现形式,它指向文件系统上的一个唯一位置。
根目录(root directory)
根目录指的就是计算机系统中的顶层目录,比如 Windows 中的 C 盘和 D 盘,Linux 中的 /。
工作目录(Working directory)
它是一个计算机用语。用户在操作系统内所在的目录,用户可在此目录之下,用相对文件名访问文件。
文件描述符(file descriptor)
文件描述符是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。
inode
索引节点的缩写,索引节点是 UNIX 系统中包含的信息,其中包含有关每个文件的详细信息,例如节点,所有者,文件,文件位置等。
共享库(shared library)
共享库是一个包含目标代码的文件,执行过程中多个 a.out 文件可能会同时使用该目标代码。
DLLs (Dynamic-Link Libraries)
动态链接库,它是微软公司在操作系统中实现共享函数库概念的一种实现方式。这些库函数的扩展名是 .DLL、.OCX(包含ActiveX控制的库)或者.DRV(旧式的系统驱动程序)。
客户端(clients)
客户端是访问服务器提供的服务的计算机硬件或软件。
服务端(servers)
在计算中,服务器是为其他程序或设备提供功能的计算机程序或设备,称为服务端。
主从架构(client-server)
主从式架构也称客户端/服务器架构、C/S 架构,是一种网络架构,它把客户端与服务器区分开来。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。有很多不同类型的服务器,例如文件服务器、游戏服务器等。
虚拟机(Virtual Machines)
在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于虚拟机这个软件所创建的环境来操作其它软件。
Java 虚拟机(Java virtual Machines)
Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
目标文件(object file)
目标文件是包含目标代码的文件,这意味着通常无法直接执行的可重定位格式的机器代码。目标文件有多种格式,相同的目标代码可以打包在不同的目标文件中。目标文件也可以像共享库一样工作。
C preprocessor
C 预处理器是 C 语言、C++ 语言的预处理器。用于在编译器处理程序之前预扫描源代码,完成头文件的包含, 宏扩展, 条件编译, 行控制等操作。