小程一言
本操作系统专栏,是小程在学操作系统的过程中的第一步,是在学习操作系统的笔记的前提下,加上自己的心得,以及资料的搜集,共同整合而成。小程在学习过程中,难免疏漏,希望各位前辈批评指正。
最主要参考书籍:现代操作系统
书中内容有些生硬,so小程参考其他书籍内容进行了一些加工
这本书饱受诟病的原因是流传思想有些过时,但是计算机有过时的思想吗?,底层逻辑的稳定是整个计算机的基石。现在的所有思想都是在基石之上。
面向群体:在校大学生,想要补齐基础知识短板的在职人员
专栏链接: link
本篇文章因内容需要,且依靠书中内容达不到小程想要的效果,so部分内容依赖其他网络资源
学习导论(Ⅲ)
操作系统相关概念
操作系统是计算机系统中的核心软件,负责管理和控制计算机硬件资源,并为用户程序提供一个简单的、统一的接口。操作系统涉及到许多重要的概念,下面给大家举例解释一下。
进程——Process
进程是程序的执行实例,是操作系统中资源分配的基本单位。每个进程都有自己的内存空间、代码、数据和运行时环境。
在操作系统中,进程是指正在运行的程序的实例。每个进程都有自己的内存空间、代码、数据和执行状态。操作系统通过进程管理来控制和协调多个进程的执行,确保它们能够正确地共享计算机系统的资源。
- 进程控制块(PCB):每个进程都有一个对应的进程控制块,用于存储进程的相关信息,包括进程的状态、程序计数器、内存分配情况、打开的文件等。操作系统通过管理进程控制块来管理和调度进程。
- 进程状态:进程可以处于不同的状态,常见的状态包括就绪态(Ready)、运行态(Running)、阻塞态(Blocked)等。操作系统通过调度算法将进程从一个状态切换到另一个状态,以实现进程的并发执行。
- 进程调度:进程调度是操作系统的核心功能之一,它决定了哪个进程在什么时候执行。常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(Round Robin)等。
- 进程同步与通信:在多进程环境下,进程之间可能需要进行同步和通信,以避免竞态条件和数据不一致性问题。操作系统提供了各种机制来实现进程之间的同步与通信,如信号量、互斥锁、消息队列等。
- 进程间通信(IPC):进程间通信是指不同进程之间进行数据交换和信息传递的过程。常见的IPC方式包括管道(Pipe)、套接字(Socket)、共享内存(Shared Memory)等。
- 进程调度器:进程调度器是操作系统中负责决定哪个进程在何时执行的组件。调度器根据调度算法选择下一个要执行的进程,以实现进程的合理调度和资源分配。
总的来说,操作系统中的进程是指正在运行的程序的实例,操作系统通过进程管理来控制和协调多个进程的执行。了解进程在操作系统中的概念和工作原理对于理解操作系统的设计和实现非常重要。
线程——Thread
线程(Thread)是比进程更小的执行单元,是进程中的实际执行单位。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文件描述符等。线程之间可以更方便地进行通信和共享数据,同时也更高效地利用系统资源。以下是关于操作系统中线程的一些重要概念:
- 线程与进程的区别:
- 进程是程序的一次执行,拥有独立的地址空间和资源,而线程是进程中的实际执行单元,共享进程的资源。
- 线程之间共享进程的内存空间,可以更方便地进行通信和数据共享,而进程之间通信需要额外的机制。
- 创建和销毁线程的开销比创建和销毁进程小,线程的切换开销也比进程小,因此多线程程序通常更高效。
- 线程调度:线程调度是操作系统的重要功能之一,决定了哪个线程在什么时候执行。操作系统通过调度算法来决定线程的执行顺序,常见的调度算法包括抢占式调度和协作式调度。
- 用户级线程和内核级线程:
- 用户级线程是由用户空间的线程库管理的线程,内核并不知道其存在,因此线程切换时不需要进入内核态。
- 内核级线程是由操作系统内核管理的线程,线程的创建、销毁和切换都需要内核的参与。
4.线程同步与通信:多个线程之间可能会同时访问共享的资源,为了避免竞态条件和数据不一致性问题,需要进行线程同步和通信。常见的同步机制包括互斥锁、条件变量、信号量等。
5.线程池:线程池是一种管理和复用线程的机制,通过预先创建一组线程并维护一个任务队列,可以减少线程的创建和销毁开销,提高系统的性能和资源利用率。
总的来说,线程是操作系统中比进程更小的执行单元,多线程编程可以提高系统的并发性能和资源利用率。了解线程在操作系统中的概念和工作原理对于编写高效的多线程程序非常重要。
调度——Scheduling
调度是指操作系统决定哪个进程或线程在何时执行的过程。调度器是操作系统中负责调度的组件,其主要目标是提高系统的性能、资源利用率和响应速度。以下是关于操作系统中调度的一些重要概念:
- 调度算法:调度算法是决定进程或线程执行顺序的方法。常见的调度算法包括:
- 先来先服务(FCFS):按照进程到达的顺序进行调度。
- 最短作业优先(SJF):选择执行时间最短的进程先执行。
- 优先级调度:根据进程的优先级来决定执行顺序。
- 轮转调度(Round Robin):按照时间片轮转的方式进行调度。
- 多级反馈队列调度:根据进程的优先级和响应时间来决定执行顺序。
- 调度策略:调度策略是指操作系统选择调度算法的具体方式。不同的应用场景和系统需求可能需要不同的调度策略,如实时系统需要保证任务的及时响应,而服务器系统需要提高吞吐量和性能。
- 调度器类型:根据调度器的位置和作用范围,可以分为:
- 全局调度器:负责整个系统中所有进程的调度。
- 局部调度器:负责特定资源或设备的调度,如磁盘调度器、网络调度器等。
- 调度过程:调度过程包括选择下一个要执行的进程、切换上下文、更新进程状态等步骤。调度过程需要考虑进程的优先级、等待时间、资源需求等因素。
- 调度器实现:调度器的实现可以通过硬件支持(如定时器中断)、软件实现(如操作系统内核)或两者结合来完成。
总的来说,调度是操作系统中重要的功能之一,通过合理的调度算法和策略可以提高系统的性能和资源利用率。了解调度在操作系统中的概念和原理对于设计和优化系统具有重要意义。
内存管理——Memory Management
内存管理是指操作系统管理计算机内存资源的过程,包括内存分配、内存回收、地址转换、内存保护等功能。以下是内存管理在操作系统中的一些重要概念:
- 内存分区:内存通常被划分为若干个固定大小的区域,每个区域称为一个内存分区。常见的内存分区包括操作系统区、用户程序区等。
- 内存分配:内存分配是指为进程分配内存空间的过程。常见的内存分配算法包括:
- 连续内存分配:将内存分为若干连续的区域,为进程分配连续的内存空间。
- 分页内存分配:将内存分为固定大小的页,进程的内存空间被划分为若干页,可以非连续地分配。
- 分段内存分配:将进程的内存空间划分为若干段,每个段可以有不同的长度,可以灵活地分配内存。
3.地址转换:地址转换是将逻辑地址(进程中使用的地址)转换为物理地址(实际的内存地址)的过程。地址转换可以通过页表、段表等数据结构来实现。
4.内存回收:内存回收是指当进程终止或释放内存时,将其占用的内存空间释放给系统以便其他进程使用。内存回收可以通过垃圾回收算法、内存重用等方式来实现。
5.虚拟内存:虚拟内存是一种扩展内存的技术,将磁盘空间作为辅助存储器,将部分进程的内存空间存放在磁盘上,可以有效扩大可用内存空间。
6.内存保护:内存保护是指通过硬件和软件机制来保护进程的内存空间不被非法访问,防止进程之间相互干扰。
总的来说,内存管理是操作系统中重要的功能之一,合理的内存管理可以提高系统的性能、安全性和稳定性。了解内存管理在操作系统中的概念和原理对于设计和优化系统具有重要意义。
地址空间——Address space
在操作系统中,地址空间是指每个进程所能访问的内存范围,包括代码段、数据段、堆段和栈段。以下是关于地址空间的一些重要概念:
- 逻辑地址空间:也称为虚拟地址空间,是进程在运行时使用的地址空间。逻辑地址是由进程中的程序生成的,通常是连续的地址空间,从0开始递增。
- 物理地址空间:是指计算机的实际内存空间,是存储器中的物理位置。操作系统通过地址转换将进程的逻辑地址映射到物理地址上。
- 代码段:存放程序执行的指令,通常是只读的,用于存放程序的可执行代码。
- 数据段:存放程序中的全局变量和静态变量,通常是可读写的。
- 堆段:用于动态内存分配,程序可以在堆中动态分配和释放内存。
- 栈段:用于存放函数调用的参数、局部变量和函数返回地址等信息,栈是一种后进先出(LIFO)的数据结构。
- 地址空间布局:不同的操作系统可能有不同的地址空间布局,包括代码段、数据段、堆段和栈段的放置顺序和大小。
- 地址空间划分:操作系统为每个进程分配独立的地址空间,使得每个进程在运行时都认为自己拥有整个系统的内存资源。
- 地址空间隔离:地址空间隔离是指不同进程的地址空间是相互隔离的,一个进程无法直接访问另一个进程的地址空间。
地址空间的管理和划分是操作系统中重要的功能之一,合理的地址空间设计可以提高系统的安全性和稳定性。了解地址空间在操作系统中的概念和原理对于设计和优化系统具有重要意义。
文件系统——File System
文件系统是用于管理存储设备上文件和目录的一种机制。文件系统提供了对文件的创建、读取、写入、删除和修改等操作,同时也管理文件的存储和组织。以下是关于文件系统的一些重要概念:
- 文件:文件是数据的集合,可以是文本文件、图像文件、音频文件等。文件系统通过文件名和扩展名来标识文件,并通过文件描述符来管理文件的属性和位置。
- 目录:目录是文件系统中用于组织和管理文件的结构,可以包含文件和其他目录。目录可以形成层次结构,方便用户对文件进行组织和查找。
- 文件系统结构:文件系统通常由文件控制块(FCB)、索引节点(inode)、目录项等数据结构组成,用于管理文件的元数据和数据块的映射关系。
- 文件访问方式:文件系统支持随机访问和顺序访问两种方式。随机访问可以直接跳转到文件的任意位置读写数据,而顺序访问则需要按顺序逐个读取或写入。
- 文件权限:文件系统可以通过权限控制来限制用户对文件的访问权限,包括读取、写入和执行权限等。
- 文件系统操作:文件系统提供了一系列API(应用程序接口)供应用程序和用户进行文件操作,如打开文件、关闭文件、读取文件、写入文件等。
- 磁盘空间管理:文件系统负责管理磁盘上的空间分配和释放,以确保文件能够被正确存储和访问。
- 文件系统类型:常见的文件系统类型包括FAT、NTFS、ext4、APFS等,不同的文件系统有不同的特点和适用场景。
文件系统是操作系统中重要的组成部分,它使得用户能够方便地管理和操作文件。合理的文件系统设计可以提高系统的性能和可靠性,同时保护文件的安全性和完整性。了解文件系统在操作系统中的概念和原理对于设计和优化系统具有重要意义。
设备管理——Device Management
设备管理是指操作系统如何管理计算机系统中的各种硬件设备,包括输入设备、输出设备、存储设备、通信设备等。设备管理的主要任务是对设备进行初始化、分配、控制和释放,以便应用程序能够与设备进行有效的交互。以下是设备管理中的一些重要概念:
- 设备驱动程序:设备驱动程序是连接操作系统和硬件设备之间的软件接口,负责控制设备的操作和与设备进行通信。每种设备都需要相应的设备驱动程序来实现对设备的管理和控制。
- 设备控制块:设备控制块(DCB)是操作系统中用于管理设备的数据结构,包含了设备的状态、寄存器信息、缓冲区等,用于协调设备的访问和操作。
- 设备分配:设备管理需要对设备进行分配,确保多个应用程序可以共享设备资源而不发生冲突。设备分配通常通过设备控制块和设备队列来实现。
- 设备中断:设备管理需要处理设备的中断请求,当设备完成一个操作或发生错误时,会向操作系统发出中断信号,操作系统需要及时响应中断并进行相应的处理。
- 设备状态管理:设备管理需要监控和管理设备的状态,包括设备是否空闲、设备是否处于忙状态、设备是否出现故障等,以便合理地调度设备的使用。
- 设备虚拟化:设备管理可以通过设备虚拟化技术将物理设备抽象为虚拟设备,使得多个虚拟机或容器可以共享同一物理设备,提高系统资源利用率。
- 设备性能优化:设备管理需要考虑如何优化设备的性能,包括设备的调度算法、缓存管理、异步操作等,以提高设备的利用率和系统的整体性能。
设备管理是操作系统中重要的功能之一,它负责协调和管理计算机系统中各种硬件设备的访问和操作,确保应用程序能够正常使用设备并提高系统的可靠性和性能。了解设备管理在操作系统中的概念和原理对于设计和优化系统具有重要意义。
中断——Interrupt
在操作系统中,中断是一种机制,用于处理硬件设备发出的信号或事件,以及应用程序请求操作系统服务的情况。中断可以打破正常的程序执行流程,立即转移到中断服务程序中进行处理。以下是关于中断的一些重要概念:
- 中断类型:在操作系统中有多种类型的中断,包括外部中断(由硬件设备触发,如时钟中断、IO设备中断)、内部中断(由CPU执行指令触发,如除零错误、非法指令)、软中断(由应用程序请求操作系统服务触发)等。
- 中断向量:每种中断类型都有一个唯一的中断向量号,操作系统通过中断向量号来确定中断的类型,然后转移到相应的中断处理程序。
- 中断处理程序:中断处理程序是操作系统中用于处理中断的代码段,它负责根据中断类型执行相应的处理逻辑,包括保存现场、处理中断事件、恢复现场等。
- 中断向量表:中断向量表是一个数据结构,存储了不同中断类型对应的中断处理程序的入口地址,当中断发生时,操作系统会根据中断向量号在中断向量表中查找对应的中断处理程序。
- 中断屏蔽:操作系统可以通过中断屏蔽机制来控制哪些中断可以被处理,哪些中断需要被忽略。通过中断屏蔽,可以提高系统的稳定性和效率。
- 中断处理流程:中断处理的基本流程包括中断触发、CPU保存现场、中断处理程序执行、中断处理完成、CPU恢复现场、恢复正常执行流程。
- 中断优先级:不同中断类型可能有不同的优先级,操作系统需要根据中断优先级来决定哪个中断应该被优先处理。
中断是操作系统中实现多任务处理和硬件设备管理的重要机制,它可以提高系统的响应速度和效率,同时保证系统的稳定性和可靠性。了解中断在操作系统中的概念和原理对于设计和优化系统具有重要意义。
虚拟化——Virtualization
虚拟化是一种技术,可以将物理资源(如处理器、内存、存储、网络等)抽象为虚拟资源,从而实现多个虚拟环境共享同一物理资源的目的。虚拟化技术在操作系统中有多种应用,包括:
- 硬件虚拟化:硬件虚拟化是将物理服务器的处理器、内存、磁盘等硬件资源虚拟化,使得多个虚拟机可以在同一台物理服务器上运行,每个虚拟机拥有独立的操作系统和应用程序。常见的硬件虚拟化技术包括VMware、Hyper-V、KVM等。
- 存储虚拟化:存储虚拟化是将多个物理存储设备整合为一个逻辑存储池,通过虚拟化技术管理和分配存储资源,提高存储资源的利用率和灵活性。存储虚拟化可以实现数据的快速备份、迁移和恢复。
- 网络虚拟化:网络虚拟化是将物理网络设备(如交换机、路由器)虚拟化,使得多个虚拟网络可以在同一物理网络上运行,提高网络资源的利用率和灵活性。网络虚拟化可以实现虚拟局域网(VLAN)、虚拟私有网络(VPN)等功能。
- 应用程序虚拟化:应用程序虚拟化是将应用程序和其依赖的运行环境打包成容器,实现应用程序的隔离和快速部署。常见的应用程序虚拟化技术包括Docker、Kubernetes等。
虚拟化技术在操作系统中的应用可以提高系统资源的利用率、灵活性和可靠性,同时降低系统维护和管理的成本。了解虚拟化在操作系统中的概念和原理对于设计和部署虚拟化环境具有重要意义。
shell
在操作系统中,Shell(壳)是用户与操作系统内核进行交互的界面,用户可以通过Shell来输入命令并与操作系统进行通信。Shell接收用户输入的命令,解释并执行这些命令,然后将结果输出给用户。Shell是操作系统中的一个重要组成部分,它提供了用户友好的命令行界面,使用户能够方便地与操作系统进行交互。
以下是Shell的一些重要特点和功能:
- 命令解释器:Shell是一个命令解释器,它能够解释用户输入的命令,并将这些命令转换成操作系统内核能够理解的形式,然后执行这些命令。
- 脚本编程:Shell还可以用于编写脚本程序,用户可以将一系列命令组合在一起,形成一个脚本文件,然后通过Shell来执行这个脚本文件。
- 环境控制:Shell可以控制用户的工作环境,例如设置环境变量、切换工作目录、管理进程等。
- 通配符和重定向:Shell支持通配符(如*、?)和重定向(如>、<),用户可以使用这些功能来操作文件和输入输出流。
- 管道:Shell支持管道操作符(|),用户可以将多个命令连接在一起,实现命令之间的数据传输。
在不同的操作系统中,可能会有不同的Shell实现,比较常见的包括:
- Bash:Bash是Unix和Linux系统中最常用的Shell,具有丰富的功能和强大的脚本编程能力。
- Zsh:Zsh是一个功能更加强大的Shell,提供了更多的特性和定制选项。
- PowerShell:PowerShell是Windows系统中的Shell,具有面向对象的特性和强大的脚本编程功能。
总的来说,Shell在操作系统中扮演着重要的角色,为用户提供了一个灵活、强大的命令行界面,使用户能够方便地管理和控制操作系统。对Shell的熟练掌握对于操作系统的使用和管理非常有帮助。