操作系统是计算机系统的一部分;要来理解操作系统必须要先知道什么是计算机系统。

【操作系统】第一章 操作系统概论_概念

计算机系统

1、计算机系统定义:是按用户的要求接收存储信息、自动进行数据处理并输出结果信息的系统。

2、计算机系统构成:硬件系统和软件系统。

3、硬件系统组成:中央处理器(CPU)、主存储器、辅助存储器、各种输入/输出设备。

计算机系统包含了操作系统。操作系统是计算机系统中最核心、最基础的软件,它负责管理和控制计算机的硬件资源和软件资源,并为用户和应用程序提供运行环境。

计算机系统通常由以下四个主要部分组成:

  1. 硬件:包括 CPU、内存、存储设备、输入/输出设备等物理设备。
  2. 软件:包括操作系统、应用程序软件和系统工具软件等。
  3. 数据:包括用户数据、程序数据和系统数据等。
  4. 用户:是指使用计算机系统的人或组织。

操作系统作为计算机系统的核心,起着承上启下的作用

  • 向上为用户和应用程序提供接口:用户和应用程序可以通过操作系统提供的接口与计算机硬件进行交互,而无需了解底层硬件的细节。
  • 向下管理和控制硬件资源:操作系统负责管理和控制计算机的硬件资源,例如 CPU、内存、存储设备、输入/输出设备等。
  • 提供资源分配和调度功能:操作系统负责将计算机系统的资源分配给各个用户和应用程序,并根据一定的策略进行调度,以提高资源的利用率。
  • 提供安全性和保护功能:操作系统负责保护计算机系统免受病毒、木马等恶意软件的攻击,并保护用户数据和隐私安全。

如果没有操作系统,计算机系统就只是一堆没有生命、无法工作的硬件。操作系统将这些硬件整合在一起,并为用户和应用程序提供运行环境,使计算机系统能够发挥其应有的功能。

因此,计算机系统实际上是包含了操作系统的。操作系统是计算机系统必不可少的一部分,它对于计算机系统的正常运行至关重要。

第一节 操作系统的概念

操作系统的定义、特征、功能
操作系统的定义

1、操作系统定义:在计算机中,集中了资源管理功能、控制程序执行、并向用户提供各种服务功能,使用户更灵活、方便、有效的使用计算机的软件称为操作系统。

操作系统是计算机系统中的一个系统软件,它是这样一些程序模块的集合:它们能有效地组织和管理计算机系统中的硬件及软件资源,合理地组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能,使得用户能够灵活、方便、有效地使用计算机,并使整个计算机系统能高效地运行。

2、操作系统的三大作用:

  • 资源的管理者
  • 向用户提供各种服务
  • 对硬件机器的扩展
操作系统的特征:

1、并发性:是指在计算机系统中同时存在着若干个运行着的程序,从宏观上看,这些程序在同时向前推进。

2、共享性:操作系统需与多个用户共享系统中的各种资源,比如CPU、内存、外部设备等。

3、随机性:操作系统不能对所运行的程序的行为以及硬件设备的情况作出事先的假定。即操作系统不能预知程序什么时候运行,什么时候因为什么原因暂停,什么时候能得到资源继续运行,什么时候运行结束等,这些都是不可预知的。

操作系统的功能(谐音:进村拥吻蛇
  • 进程管理
    程管理的实质:对中央处理器进行管理。或者称为处理机管理。
  • 存储管理
    任务:管理计算机内存的资源;分配、回收、保护、扩张。
  • 用户接口
    操作系统是用户与计算机之间的接口。
    为用户提供一个使用系统的良好环境,使用户能有效地组织自己的工作流程,并使整个系统高效地运行。
  • 文件管理
    有效地支持文件的存储、检索和修改等操作,解决文件的共享、保密和保护问题、以便用户方便、安全地访问文件。存储空间管理、目录管理、文件系统安全性。
  • 设备管理
    计算机系统中除了处理器和内存以外的所有输入、输出设备的管理。外部设备的分配、启动、故障处理。
    使用的技术有:中断、通道、虚拟机、缓冲;尽量发挥主机与设备的并行能力。
研究操作系统的观点
  • 软件的观点
    操作系统是一种大型系统软件,它是多种功能程序的集合。有外在特性和内在特性。
    外在特性:接口
    内在特性:与硬件交互
  • 资源管理的观点
    操作系统负责登记谁在使用什么样的资源,系统中还有哪些资源空闲,当前响应了谁对资源的请求,以及回收那些不再使用的资源等。
  • 进程的观点
    把操作系统看做由多个同时独立运行的程序和一个对这些程序进行协调的核心。
    侧重于分析系统各部分的并行工作,研究处理各项管理任务的分割以及这些管理任务相互之间的关系,比如:竞争关系、进程通信。
  • 虚拟机的观点
    在操作系统的支持下,用户不需要直接使用硬件机器(裸机),而是使用操作系统提供的各种手段来控制和使用计算机。
    例如,把所有设备和文件的操作抽象为统一的打开、关闭、读、写等,用户感觉不到底层的操作差异。
    把操作系统的全部功能,包括系统调用、命令、作业控制语言等、称为操作系统虚机器。
  • 服务提供的观点
    从用户的角度、站在操作系统之外观察操作系统。认为该服务提供者为用户提供了比裸机功能更强、服务质量更高、更方便灵活的虚拟机。

第二节 操作系统的发展

1. 早期计算机和无操作系统阶段(1940s-1950s)

在计算机发展的早期,没有现代意义上的操作系统。程序员通过打孔卡或纸带输入程序,计算机一次只能运行一个程序,用户需要直接控制硬件。

特点:
  • 手工操作和装载程序。
  • 每次只能执行一个程序,没有并发性。
  • 没有文件系统,数据存储和访问不方便。
2. 批处理系统(1950s-1960s)

随着计算机技术的发展,批处理系统应运而生。批处理系统允许多个作业(Job)批量处理,提高了计算机的利用率。(同时只能有一道程序驻留在内存中。)

特点:
  • 作业由操作员收集并批量输入。
  • 作业调度程序(Job Scheduler)负责作业的顺序执行。
  • 作业一个接一个地执行,不存在并发性。
  • 减少了CPU空闲时间,提高了资源利用率。
  • 典型代表:IBM 7094和UNIVAC LARC。
3. 多道程序设计系统(1960s-1970s)

多道程序设计(Multiprogramming)引入了多任务处理的概念,允许多个程序同时驻留在内存中,并由操作系统进行管理和调度。

其核心思想是利用CPU和I/O设备的时间差,使得在一个程序等待I/O操作时,CPU可以为其他程序服务,从而提高系统的并发性和资源利用率。

特点:
  • 多个程序共享CPU时间,提高系统效率。
  • 引入了内存管理和作业调度机制。
  • 出现了中断处理,操作系统可以响应外部事件。
  • 典型代表:IBM System/360。
4. 分时系统(1960s-1970s)

分时系统(Time-sharing System)使得多个用户可以通过终端同时使用计算机。操作系统按时间片(Time Slice)为各用户分配CPU时间。

特点:
  • 提供了交互式计算环境。
  • 引入了虚拟内存概念,增强了内存管理。
  • 提高了用户响应时间和系统效率。
  • 典型代表:Multics、UNIX。
对比:

多道程序设计系统和分时系统在概念和实现上有一些重叠,但它们的目标和重点有所不同。

多道程序设计系统(Multiprogramming System)的主要目标是提高CPU和其他系统资源的利用率。它通过让多个程序同时驻留在内存中,并在这些程序之间切换,使得在一个程序等待I/O操作时,CPU可以执行其他程序,从而减少CPU空闲时间。

分时系统(Time-sharing System)的主要目标是提供交互式的多用户环境,使得多个用户可以同时通过终端使用同一台计算机。每个用户在使用计算机时都感觉自己独占了系统,因为系统快速地在用户之间切换。通过时间片调度算法,使每个用户都能公平地获得CPU时间。提高用户体验。

1.目标不同

  • 多道程序设计系统:主要目标是提高系统资源利用率和吞吐量。
  • 分时系统:主要目标是提供交互式的多用户环境,保证每个用户都能及时响应。

2.用户交互

  • 多道程序设计系统:通常不强调用户交互,适用于批处理和后台任务。
  • 分时系统:高度强调用户交互,每个用户都能及时得到响应。

3.调度方式

  • 多道程序设计系统:调度方式可以是基于优先级、作业长短等,以提高资源利用率。
  • 分时系统:通常使用时间片轮转调度,确保每个用户公平获得CPU时间。

4.响应时间

  • 多道程序设计系统:对响应时间没有严格要求,主要关注系统的吞吐量和效率。
  • 分时系统:对响应时间要求较高,以保证用户的交互体验。
5. 实时系统(1970s至今)

实时系统(Real-time System)对响应时间有严格要求,广泛应用于工业控制、军事、航空航天等领域。

特点:
  • 实时操作系统(RTOS)确保任务在规定时间内完成。
  • 分为硬实时系统(硬性时限)和软实时系统(软性时限)。
  • 具有高可靠性和确定性。
  • 典型代表:VxWorks、QNX。
6. 个人计算机操作系统(1980s至今)

个人计算机(PC)的普及推动了图形用户界面(GUI)操作系统的发展,如Windows和Mac OS。

特点:
  • 用户友好的图形界面。
  • 支持多任务和多用户环境。
  • 大量的第三方应用程序支持。
  • 典型代表:MS-DOS、Windows、Mac OS。
这和多道程序设计系统以及分时系统有什么区别?

多用户个人计算机操作系统通过多任务处理和多用户支持来实现多道程序的并行执行。

多用户个人计算机操作系统:不仅支持多个用户同时使用,还强调个人计算机的用户体验、图形用户界面(GUI)和多媒体处理能力。

多用户个人计算机操作系统:不仅关注CPU时间分配,还管理图形界面、存储设备、多媒体设备等资源,提供更全面的资源管理和优化。

多用户个人计算机操作系统可以看作是包含了分时系统的一些特性,但它们实现的范围和复杂度更广。具体来说:

  • 包含特性:多用户个人计算机操作系统通常包含分时系统的时间片轮转调度、用户隔离和并发处理机制。
  • 扩展特性:除此之外,它们还支持图形用户界面、多媒体处理、设备管理、复杂的安全机制等,这些是传统分时系统所不具备的。
7. 网络操作系统和分布式系统(1980s至今)

网络操作系统(Network Operating System)和分布式系统(Distributed System)支持计算机网络和分布式计算。

特点:
  • 提供网络服务和资源共享。
  • 支持分布式文件系统和进程管理。
  • 提高了系统的扩展性和容错能力。
  • 典型代表:Novell NetWare、Andrew File System、Google's Borg。
8. 嵌入式操作系统(1990s至今)

嵌入式操作系统(Embedded Operating System)用于嵌入式设备,如智能手机、家电、汽车控制系统等。

特点:
  • 资源受限环境下的高效运行。
  • 实时性和可靠性要求高。
  • 典型代表:Embedded Linux、FreeRTOS、ThreadX。
9. 移动操作系统(2000s至今)

移动操作系统专为智能手机和平板电脑设计,强调触摸屏和移动性。

特点:
  • 支持触摸屏和手势操作。
  • 提供丰富的移动应用生态系统。
  • 高效的电源管理和联网功能。
  • 典型代表:Android、iOS。
10. 云操作系统和虚拟化技术(2010s至今)

云计算的兴起推动了云操作系统和虚拟化技术的发展。

特点:
  • 支持虚拟化和云服务的管理。
  • 提供高效的资源调度和管理能力。
  • 支持大规模分布式计算和存储。
  • 典型代表:VMware vSphere、OpenStack、Kubernetes。

第三节 操作系统分类

常见分类法
1. 按用户数目分类
单用户操作系统

单用户操作系统一次只允许一个用户使用计算机系统。典型例子包括:

  • MS-DOS:微软早期的磁盘操作系统。
  • 单用户版的Windows:如早期的Windows 95/98。
多用户操作系统

多用户操作系统支持多个用户同时使用同一台计算机,用户之间彼此独立,互不干扰。典型例子包括:

  • Unix:一个典型的多用户操作系统。
  • Linux:广泛应用于服务器和个人计算机。
  • Windows Server:微软的服务器操作系统,支持多用户环境。
2. 按任务数目分类
单任务操作系统

单任务操作系统一次只能执行一个任务,用户必须等待当前任务完成后才能执行下一个任务。典型例子包括:

  • MS-DOS:一次只能运行一个程序。
多任务操作系统

多任务操作系统可以同时执行多个任务,通过任务切换提高CPU的利用率。典型例子包括:

  • Windows:从Windows 95开始支持多任务。
  • Unix:天然支持多任务。
  • Linux:支持多任务操作。
3. 按实时性分类
实时操作系统

实时操作系统要求在严格的时间限制内完成任务,主要用于对时间要求极高的环境,如工业控制、航空航天等。典型例子包括:

  • VxWorks:广泛应用于嵌入式系统。
  • RTLinux:实时扩展版的Linux。
非实时操作系统

非实时操作系统对任务的完成时间没有严格的要求,适用于日常计算任务。典型例子包括:

  • Windows:主要用于个人计算和办公自动化。
  • Linux:广泛应用于服务器和桌面环境。
4. 按用途分类
通用操作系统

通用操作系统适用于多种应用场景,可以运行各种类型的软件。典型例子包括:

  • Windows:广泛应用于个人计算和企业环境。
  • Linux:广泛应用于服务器、个人计算和嵌入式系统。
专用操作系统

专用操作系统针对特定应用场景设计,具有特定功能。典型例子包括:

  • 嵌入式操作系统:如FreeRTOS,专用于嵌入式设备。
  • 智能手机操作系统:如Android和iOS,专用于移动设备。
  • 网络操作系统:如Cisco IOS,专用于网络设备。
5. 按内核结构分类
单体内核操作系统

单体内核操作系统将所有的核心功能都集成在一个内核中,所有的操作系统服务都在内核态运行。典型例子包括:

  • Linux:采用单体内核。
  • Windows NT内核:大部分功能在内核态运行。
微内核操作系统

微内核操作系统只保留最基本的功能,如进程管理、内存管理和低级别的I/O操作,其他服务运行在用户态。典型例子包括:

  • Minix:一个典型的微内核操作系统。
  • QNX:一个用于嵌入式系统的微内核操作系统。
6. 按平台分类
桌面操作系统

桌面操作系统主要用于个人计算机,提供用户友好的图形界面和应用程序支持。典型例子包括:

  • Windows:最流行的桌面操作系统。
  • Mac OS:苹果公司为其个人计算机设计的操作系统。
移动操作系统

移动操作系统主要用于智能手机和平板电脑,优化了触摸屏操作和移动应用。典型例子包括:

  • Android:谷歌开发的开源操作系统。
  • iOS:苹果公司为其移动设备开发的操作系统。
嵌入式操作系统

嵌入式操作系统用于嵌入式设备,通常要求高效和实时性。典型例子包括:

  • FreeRTOS:轻量级实时操作系统。
  • 嵌入式Linux:用于各种嵌入式设备。
服务器操作系统

服务器操作系统用于服务器环境,提供强大的网络和资源管理功能。典型例子包括:

  • Windows Server:微软的服务器操作系统。
  • Linux:如Ubuntu Server和CentOS。
特殊分类方法

操作系统可以根据其工作方式和应用场景进行分类,具体包括批处理系统、分时系统和实时系统。这种分类方法侧重于操作系统如何处理任务和用户交互的方式。

1. 批处理系统(Batch Processing System)

定义

批处理系统是一种允许用户将一组作业(jobs)提交到计算机系统中,这些作业在后台按顺序执行,完成后系统会将结果返回给用户。

特点

  • 无交互性:用户提交作业后无需与系统交互,作业完成后系统输出结果。
  • 高吞吐量:适用于需要处理大量数据和作业的环境,通过减少用户交互时间提高系统效率。
  • 作业队列:作业按队列方式排队,系统按顺序逐个执行。
  • 批处理:作业通常以批次方式执行,常用于定期任务。

典型应用

  • 数据处理:如银行批量处理交易数据。
  • 科学计算:如大型气象数据处理和模拟。
2. 分时系统(Time-Sharing System)

定义

分时系统允许多个用户通过终端同时与计算机系统交互,系统通过快速切换在用户之间分配CPU时间,使每个用户感觉自己独占了系统。

特点

  • 多用户交互:支持多个用户同时操作,用户能实时得到系统响应。
  • 时间片轮转:系统将CPU时间划分为小段时间片,每个用户轮流使用CPU。
  • 高响应性:系统尽量保证每个用户都能快速得到响应,提高用户体验。
  • 资源共享:用户之间共享系统资源,提高资源利用率。

典型应用

  • 在线系统:如大学计算中心,商业数据中心。
  • 交互式应用:如远程登录、在线编程和文本编辑。
3. 实时系统(Real-Time System)

定义

实时系统是一种对时间要求严格的操作系统类型,确保任务在规定时间内完成。根据时间要求的严格程度,可以分为硬实时系统和软实时系统。

特点

  • 时间敏感:任务必须在特定时间内完成,否则可能导致系统故障或严重后果。
  • 高可靠性:系统需要非常可靠,通常用于关键任务场景。
  • 确定性:系统行为可预测,能够保证在特定时间内完成任务。
  • 优先级调度:实时任务通常有优先级,系统根据优先级调度任务。

分类

  • 硬实时系统:任务必须严格按时完成,延迟不可接受。例如,航空控制系统、核电站控制系统。
  • 软实时系统:任务尽量按时完成,但偶尔的延迟是可以接受的。例如,多媒体系统、网络游戏。

典型应用

  • 工业控制:如自动化生产线控制系统。
  • 交通控制:如铁路信号控制、航空航天器控制。
  • 医疗设备:如心脏监护仪、CT扫描仪。
总结

系统类型

定义

特点

典型应用

批处理系统

一组作业在后台顺序执行,无需用户交互

高吞吐量,无交互,作业队列

数据处理,科学计算

分时系统

多用户通过终端同时交互,按时间片轮转使用CPU

多用户交互,高响应性,资源共享

在线系统,交互式应用

实时系统

严格时间限制内完成任务,分为硬实时和软实时

时间敏感,高可靠性,确定性

工业控制,交通控制,医疗设备

这种分类方式侧重于操作系统如何处理任务、用户交互以及时间敏感性,有助于我们理解和选择适合特定应用场景的操作系统。

第四节 操作系统设计

操作系统设计是一个复杂且多层次的过程,涉及硬件与软件之间的紧密结合。

操作系统设计的目标

在设计操作系统时,通常需要考虑以下几个目标:

  1. 效率:操作系统应高效利用系统资源,包括CPU、内存、存储和外设。
  2. 安全性:保护系统和用户数据免受未授权访问和恶意攻击。
  3. 可靠性:确保系统稳定运行,防止崩溃和数据丢失。
  4. 扩展性:支持硬件和软件的更新和扩展。
  5. 可维护性:代码结构清晰,便于维护和调试。
  6. 用户友好性:提供直观的用户界面和易于使用的系统功能。
操作系统设计的常用策略

在设计操作系统时,常用的策略包括:

  • 分层设计:将操作系统分为多个层次,每层负责不同的功能,简化设计和维护。
  • 模块化设计:将操作系统分为多个模块,每个模块独立实现特定功能,增强系统的可扩展性和可维护性。
  • 虚拟化:通过虚拟化技术,将物理资源虚拟化为多个虚拟资源,提高资源利用率和灵活性。
  • 面向对象设计:使用面向对象的方法设计操作系统,提高代码的重用性和可维护性。
操作系统设计的例子
a. UNIX/Linux

UNIX和Linux采用单体内核架构,所有操作系统服务都在内核态运行。Linux的设计强调简洁、高效和安全,广泛应用于服务器、嵌入式系统和桌面环境。Linux内核支持模块化,允许用户加载和卸载内核模块。

Linux内核起源于1991年由Linus Torvalds开发的Minix内核。Minix是一个小型、简单的单体内核操作系统。Torvalds最初的目标是创建一个比Minix更强大的操作系统,但他也希望保留Minix的简单性和易用性。因此,他选择了单体内核架构。

b. Windows

Windows采用混合内核架构,结合了单体内核和微内核的特点,提供丰富的图形用户界面和多媒体支持。Windows的设计注重用户体验和兼容性,广泛应用于个人计算机和企业环境。

c. macOS

macOS基于微内核Mach和BSD UNIX,结合了微内核和单体内核的优点,提供强大的图形用户界面和多媒体处理能力。macOS的设计强调用户友好性和系统稳定性,广泛应用于苹果电脑。

操作系统的结构
1. 单体结构

单体结构的操作系统将所有的功能都包含在一个大型程序中,所有的操作系统服务(如文件系统、进程管理、内存管理等)都运行在内核态,具有最高的权限。这种结构简单,但存在以下问题:

  • 复杂性:所有功能紧密耦合,系统复杂,维护困难。
  • 可靠性和安全性:任何一个模块的错误可能导致整个系统崩溃。
2. 层次结构

层次结构将操作系统划分为多个层次,每一层只服务于其上层并只与其下层通信。最底层是硬件层,最上层是用户接口层。这样设计的优点是各层次之间的独立性和模块化。

  • 优点:易于调试和维护,每一层只需要与相邻的两层交互。
  • 缺点:可能导致性能下降,因为每个操作可能需要经过多个层次的处理。
3. 微内核结构

微内核结构将操作系统核心功能最小化,只保留最基本的进程管理、内存管理和低级别的I/O操作等。其他服务(如文件系统、设备驱动等)运行在用户态。微内核通过消息传递与用户态的服务通信。

  • 优点:增强系统的可靠性和安全性,内核功能少,错误可能性小。
  • 缺点:由于需要频繁的上下文切换和消息传递,可能导致性能下降。
4. 模块化结构

模块化结构结合了单体结构和微内核结构的优点,内核本身包含一个核心部分,其他功能模块化,可以动态加载或卸载。这种结构提高了系统的灵活性和可扩展性。

  • 优点:易于扩展和维护,各模块相对独立。
  • 缺点:如果模块间通信复杂,仍可能影响性能。
5. 虚拟机结构

虚拟机结构通过虚拟机管理程序(Hypervisor)在物理硬件上创建多个虚拟机,每个虚拟机运行一个操作系统。这种结构使得资源利用率更高,并且可以运行不同操作系统。

  • 优点:增强资源利用率和系统隔离性,易于管理和迁移。
  • 缺点:由于额外的虚拟化开销,可能导致性能下降。
6.外核结构(Exokernel Structure)

外核结构将操作系统最小化,仅提供对硬件资源的安全管理,应用程序可以直接访问硬件资源,操作系统通过库提供高级功能。

优点

  • 高性能:应用程序可以直接控制硬件资源。
  • 高灵活性:应用程序可以定制资源管理策略。

缺点

  • 编程复杂:开发人员需要更多地关注硬件细节。
  • 安全性挑战:直接访问硬件资源可能导致安全性问题。

主流的操作系统并一般不能单一归为是某一种操作系统结构;他们在设计时大都采用混合的结构模式以获取对应体系结构的优点。

操作系统的体系结构

操作系统体系结构通常指操作系统的总体设计和逻辑组织,包括以下几个方面:

  1. 内核结构:如单体内核、微内核等。
  2. 系统调用接口:提供给应用程序的编程接口。
  3. 进程管理:进程创建、调度、同步和通信。
  4. 内存管理:内存分配、回收和虚拟内存机制。
  5. 文件系统:文件和目录的组织、访问和管理。
  6. 设备管理:设备驱动程序和I/O操作。
  7. 安全性和保护:访问控制、身份验证和数据保护。
操作系统结构与操作系统体系结构的区别
  1. 操作系统结构
  • 强调操作系统内部组件的组织方式。
  • 主要关注内核的设计和实现,如单体内核、微内核等。
  • 描述内核和操作系统服务的关系和通信方式。
  1. 操作系统体系结构
  • 强调操作系统的总体设计和逻辑组织
  • 涵盖操作系统的所有方面,包括内核结构、系统调用接口、进程管理、内存管理等。
  • 描述操作系统的功能模块及其交互方式。

这两个概念似乎很多教材都要么混淆要么混为一谈。

操作系统这门课程更偏重于操作系统体系结构的总体知识而不仅仅时内核。

第五节 操作系统启动

操作系统启动是计算机系统启动过程中的一个关键阶段。在这个阶段,系统从断电状态启动并加载操作系统内核,最终将控制权交给操作系统,使其能够开始管理硬件和执行用户程序。

以下是详细的操作系统启动过程,分为硬件初始化引导加载程序(Bootloader)和内核初始化三个主要部分。

1. 硬件初始化

硬件初始化由计算机的固件(如BIOS或UEFI)负责,主要任务是对系统硬件进行自检和初始化。

a. 加电自检(Power-On Self Test, POST)
  1. 加电:当计算机电源被打开时,电源提供稳定的电力给计算机的各个组件。
  2. 自检:BIOS/UEFI开始执行加电自检,检测并初始化系统的基本硬件组件,如CPU、内存、显卡、键盘等。
  3. 错误检测:如果检测到硬件错误,BIOS/UEFI通常会通过蜂鸣声或显示错误信息来通知用户。
b. 硬件初始化
  1. 硬件配置:BIOS/UEFI根据系统配置文件和硬件信息初始化各种设备。
  2. 启动设备选择:BIOS/UEFI确定从哪个设备启动操作系统,如硬盘、光盘、USB设备或网络启动。
2. 引导加载程序(Bootloader)

引导加载程序是一个小型程序,负责将操作系统内核加载到内存中并启动它。

引导加载程序通常分为两级:主引导记录(Master Boot Record, MBR)或GUID分区表(GUID Partition Table, GPT)和二级引导加载程序。

a. 主引导记录(MBR)或GUID分区表(GPT)
  1. MBR/GPT定位:BIOS/UEFI将控制权交给存储设备的第一个扇区,其中存储了MBR或GPT。
  2. 加载一级引导加载程序:MBR包含一个小型的引导程序和分区表信息。该引导程序负责加载并执行二级引导加载程序。
b. 二级引导加载程序
  1. 加载操作系统内核:二级引导加载程序(如GRUB、LILO、Syslinux等)提供一个菜单供用户选择要启动的操作系统。选定操作系统后,二级引导加载程序将其内核加载到内存中。
  2. 内核启动参数:二级引导加载程序还可以传递启动参数给内核,以配置内核的启动行为。
3. 内核初始化

内核初始化是操作系统启动过程的最后一步,涉及操作系统内核的启动和系统资源的初始化。

a. 内核加载
  1. 内存映射:内核将自己从引导加载程序指定的内存地址复制到适当的位置。
  2. 初始设置:内核初始化数据结构、内存管理单元(MMU)和硬件中断处理程序。
b. 硬件检测与初始化
  1. 设备驱动加载:内核检测系统中的硬件设备,并加载相应的设备驱动程序。
  2. 硬件资源分配:内核分配和管理硬件资源,如内存、CPU时间和I/O设备。
c. 启动用户空间进程
  1. 初始化进程(init):内核启动第一个用户空间进程,通常是init(或systemd)。这个进程负责启动和管理系统中的其他用户空间进程。
  2. 服务启动:init或systemd根据配置文件启动系统服务和守护进程,如网络服务、登录服务等。
d. 用户登录
  1. 登录界面:系统服务启动后,操作系统显示登录界面(CLI或GUI),等待用户登录。
  2. 用户环境:用户登录成功后,操作系统启动用户会话,加载用户配置文件和应用程序。
图解说明

为了更直观地说明操作系统启动过程,可以用下图来表示:

+------------------+          +------------------+          +------------------+
|                  |          |                  |          |                  |
|  硬件初始化        |          |  引导加载程序      |          |  内核初始化        |
| (BIOS/UEFI)      |  ----->  |  (Bootloader)    |  ----->  |  (Kernel)        |
|                  |          |                  |          |                  |
+------------------+          +------------------+          +------------------+
       |                         |                              |
       v                         v                              v
  加电自检 (POST)             MBR/GPT                          内核加载
       |                         |                              |
       v                         v                              v
  硬件初始化                  二级引导加载程序                 硬件检测与初始化
       |                         |                              |
       v                         v                              v
  启动设备选择                  内核加载                      启动用户空间进程
       |                         |                              |
       v                         v                              v
  引导加载程序启动             内核启动参数                      用户登录界面
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
详细的硬件初始化过程

硬件初始化过程是计算机启动时由固件(BIOS或UEFI)完成的一系列任务,其主要目的是确保计算机硬件正确配置并准备好启动操作系统。这个过程涉及多个步骤,包括硬件自检、初始化和配置。以下是硬件初始化过程的详细步骤及其具体任务:

1. 加电自检(Power-On Self Test, POST)

任务:

  1. CPU复位:一旦电源打开,电源供应器(PSU)稳定电压后,CPU从预定义的地址(通常是BIOS/UEFI存储器的起始地址)开始执行代码。
  2. 内存检查:检测并初始化系统内存(RAM),确保内存模块正常工作。
  3. 基本硬件检测:检测并初始化关键硬件组件,如键盘、显卡和基本输入输出系统(BIOS/UEFI芯片)。
  4. 硬件错误检测:检查硬件组件是否存在错误,如果发现错误,通过蜂鸣声或显示错误代码提示用户。

代码或程序参与:

  • 固件代码:由BIOS/UEFI固件代码执行硬件检测和初始化。
  • 硬件自检程序:BIOS/UEFI中包含的自检程序用于检查各个硬件组件。
2. 硬件初始化

任务:

  1. 初始化系统时钟:设置系统时钟,使其正确运行并提供时间信息。
  2. 初始化芯片组:初始化主板上的芯片组,以管理CPU与其他硬件之间的通信。
  3. 设备检测:检测并识别所有连接的硬件设备,包括硬盘、光驱、USB设备等。
  4. 外设初始化:初始化外围设备,如显卡、网卡、声卡等,使其准备好被使用。
  5. 设置引导顺序:确定引导设备的顺序(如硬盘、光盘、USB设备或网络引导),从第一个可引导设备加载操作系统。

在计算机硬件中,**芯片组(Chipset)**是指主板上的一组集成电路(IC),它们负责管理CPU与其他硬件组件之间的通信,而不是指CPU本身。芯片组通常由北桥(Northbridge)【负责高速设备的数据传输,如系统内存(RAM)和图形处理单元(GPU)】和南桥(Southbridge)【处理较低速的数据传输,管理I/O设备,如硬盘、光驱、USB设备、网络接口和音频接口】两个部分组成,但在现代计算机中,这两者常常被整合在一起或者由一个单独的芯片管理。

在现代系统中,北桥的功能逐渐被集成到CPU内部,特别是内存控制器和部分PCIe通道;南桥的功能现在通常被称为平台控制器集成(Platform Controller Hub,PCH),并由一个单一的芯片处理。

代码或程序参与:

  • 固件代码:BIOS/UEFI固件包含初始化系统时钟、芯片组和外围设备的代码。
  • 设备驱动程序:BIOS/UEFI中的基本设备驱动程序用于初始化和管理外围设备。
3. 硬件配置

任务:

  1. 配置硬件参数:根据BIOS/UEFI设置和硬件配置文件,调整硬件参数(如内存频率、CPU电压等)。
  2. 启动引导加载程序:将控制权移交给存储设备的引导加载程序(Bootloader),如主引导记录(MBR)或GUID分区表(GPT)中的引导代码。

代码或程序参与:

  • BIOS/UEFI设置:通过BIOS/UEFI设置界面或配置文件调整硬件参数。
  • 引导代码:BIOS/UEFI固件代码负责加载并执行引导加载程序。
具体过程的详细说明
  1. CPU复位和执行起始代码
  • 当电源打开时,CPU从预定义的复位向量地址开始执行BIOS/UEFI固件中的启动代码。
  1. 内存检查
  • BIOS/UEFI执行一系列测试来验证RAM是否正常工作,包括读写测试和地址线测试。
  1. 硬件错误检测
  • 检查内存、键盘、显卡等关键组件是否工作正常。如果发现错误,BIOS/UEFI会通过蜂鸣声或显示错误代码提示用户。
  1. 初始化系统时钟和芯片组
  • BIOS/UEFI设置系统时钟,确保系统时间正确。然后初始化主板上的芯片组,配置CPU、内存和外设之间的通信。
  1. 设备检测和初始化
  • BIOS/UEFI扫描并检测所有连接的硬件设备,如硬盘、光驱、USB设备等,并初始化这些设备。
  1. 设置引导顺序并启动引导加载程序
  • 根据用户设置或默认配置,确定引导设备的优先级。然后从第一个可引导设备的MBR或GPT加载引导加载程序。
硬件初始化过程中涉及的代码或程序
  • BIOS/UEFI固件代码:存储在主板ROM或闪存中的固件代码,负责执行加电自检、硬件初始化和配置任务。
  • 自检程序:BIOS/UEFI固件中的自检程序,用于检测和验证硬件组件的功能。
  • 基本设备驱动程序:BIOS/UEFI固件中的基本驱动程序,用于初始化和管理硬件设备。
  • 引导代码:存储在引导设备(如硬盘、光盘或USB设备)中的引导加载程序代码,负责加载操作系统内核。
芯片组
+---------------------------------------+
|                CPU                    |
| +-----------------------------------+ |
| | 集成内存控制器  |  PCIe控制器         | |
| +-----------------+-----------------+ |
+---------------------------------------+
                 |
                 |
+----------------v-----------------------+
|               芯片组(PCH)              |
| +-----------------------------------+  |
| | SATA控制器   |  USB控制器  | 网卡    |  |
| | 音频控制器   |  PCI控制器  | 时钟     |  |
| +-----------------+-----------------+  |
+----------------------------------------+
                 |
                 |
+----------------v-----------------------+
|                外设                     |
| +-----------------------------------+  |
| | 硬盘     |   光驱    |  键盘  | 鼠标 |  |
| +-----------------------------------+  |
+----------------------------------------+
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.



Good Luck!!