1. 操作系统概述
操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的系统软件,它是计算机系统的核心与基石。第五章主要介绍了操作系统的基本概念、功能和分类。
1.1 操作系统的基本概念
操作系统是计算机系统中最基础、最重要的软件之一,它负责管理计算机的硬件资源和软件资源,为用户和应用程序提供良好的运行环境。以下是操作系统的一些基本概念:
- 进程管理:操作系统通过进程管理,实现多道程序的并发执行。
- 内存管理:操作系统负责管理计算机的内存资源,包括内存分配、回收和扩充等。
- 文件系统:操作系统通过文件系统管理计算机中的文件,包括文件的创建、删除、读写等操作。
- 输入/输出设备管理:操作系统负责管理计算机的输入/输出设备,包括设备的分配、控制和数据传输等。
1.2 操作系统的功能
操作系统的功能主要包括以下几个方面:
- 处理机管理:负责调度和管理计算机的处理机资源,实现多道程序的并发执行。
- 存储管理:负责管理计算机的内存资源,包括内存分配、回收和扩充等。
- 文件管理:负责管理计算机中的文件,包括文件的创建、删除、读写等操作。
- 输入/输出管理:负责管理计算机的输入/输出设备,包括设备的分配、控制和数据传输等。
- 用户界面:为用户提供操作计算机的界面,包括命令行界面和图形用户界面等。
1.3 操作系统的分类
操作系统可以分为以下几类:
- 单用户操作系统:如MS-DOS、Windows早期版本等。
- 多用户操作系统:如Unix、Linux、Windows Server等。
- 实时操作系统:如VxWorks、QNX等。
- 嵌入式操作系统:如μC/OS、FreeRTOS等。
2. 进程管理
进程管理是操作系统核心功能之一,主要涉及进程的创建、调度、同步和通信等方面。
2.1 进程的概念
进程是操作系统中执行程序的基本单位,它具有一定的生命周期,包括创建、执行、阻塞、就绪、等待和终止等状态。
2.2 进程的调度
进程调度是指操作系统根据一定的调度算法,从就绪队列中选择一个或多个进程,使其获得处理机执行。常见的调度算法有:
- 先来先服务(FCFS)
- 短作业优先(SJF)
- 最高响应比优先(HRRN)
- 轮转调度(RR)
2.3 进程的同步与通信
进程同步是指进程之间在执行过程中需要协调彼此的行为,以避免发生冲突。进程通信是指进程之间相互传递信息的过程。
2.4 实战练习解析
下面以一个简单的例子,说明进程调度的实现过程。
import time
# 定义进程类
class Process:
def __init__(self, name, cpu_time):
self.name = name
self.cpu_time = cpu_time
self.state = "就绪"
# 进程执行函数
def run(self):
self.state = "运行"
time.sleep(self.cpu_time)
self.state = "完成"
# 定义进程调度算法
def fcfs(process_list):
for process in process_list:
process.run()
# 测试进程调度
if __name__ == "__main__":
process_list = [Process("进程1", 2), Process("进程2", 5), Process("进程3", 1)]
fcfs(process_list)
for process in process_list:
print(f"{process.name}: {process.state}")
在上面的例子中,我们使用先来先服务(FCFS)算法对三个进程进行调度。运行结果如下:
进程1: 完成
进程2: 完成
进程3: 完成
3. 内存管理
内存管理是操作系统核心功能之一,主要涉及内存的分配、回收和扩充等方面。
3.1 内存分配策略
内存分配策略是指操作系统如何将内存分配给进程。常见的内存分配策略有:
- 静态分配:在进程运行前分配内存,如固定分区分配、可变分区分配等。
- 动态分配:在进程运行过程中分配内存,如分页存储管理、分段存储管理等。
3.2 页面置换算法
页面置换算法是指当内存不足时,操作系统如何选择将哪个页面换出内存。常见的页面置换算法有:
- 最少使用(LRU)
- 最近未使用(NRU)
- 最近最少使用(LRU)
- 先来先服务(FIFO)
3.3 实战练习解析
下面以一个简单的例子,说明分页存储管理的实现过程。
import random
# 定义内存页
class MemoryPage:
def __init__(self, page_id):
self.page_id = page_id
self.is_valid = False
def allocate(self):
self.is_valid = True
def deallocate(self):
self.is_valid = False
# 定义进程
class Process:
def __init__(self, page_ids):
self.page_ids = page_ids
# 定义内存管理器
class MemoryManager:
def __init__(self, page_count):
self.memory_pages = [MemoryPage(i) for i in range(page_count)]
self.page_table = {}
def allocate(self, process):
for page_id in process.page_ids:
if not any(page.is_valid for page in self.memory_pages):
break
for page in self.memory_pages:
if not page.is_valid:
page.allocate()
self.page_table[page_id] = page
break
def deallocate(self, process):
for page_id in process.page_ids:
if page_id in self.page_table:
self.page_table[page_id].deallocate()
del self.page_table[page_id]
# 测试内存管理
if __name__ == "__main__":
memory_manager = MemoryManager(3)
process1 = Process([1, 2, 3])
process2 = Process([4, 5, 6])
process3 = Process([7, 8, 9])
memory_manager.allocate(process1)
memory_manager.allocate(process2)
memory_manager.allocate(process3)
for page_id, page in memory_manager.page_table.items():
print(f"页面 {page_id}: {page.is_valid}")
memory_manager.deallocate(process1)
for page_id, page in memory_manager.page_table.items():
print(f"页面 {page_id}: {page.is_valid}")
在上面的例子中,我们定义了一个内存管理器,它使用简单的分页存储管理策略。运行结果如下:
页面 1: True
页面 2: True
页面 3: True
页面 1: False
页面 2: False
页面 3: False
4. 文件系统
文件系统是操作系统用于管理文件的一种数据结构,它提供了文件的创建、删除、读写等操作。
4.1 文件系统的概念
文件系统是操作系统核心功能之一,它负责管理计算机中的文件。以下是文件系统的一些基本概念:
- 文件:文件是存储在计算机中的数据集合,可以是程序、文档、图片等。
- 目录:目录是文件系统中用于组织和管理文件的容器。
- 文件系统:文件系统是指用于存储、访问和管理文件的软件和硬件的集合。
4.2 文件系统的类型
文件系统可以分为以下几种类型:
- 文件系统类型:如FAT、NTFS、EXT2/EXT3/EXT4等。
- 文件系统存储介质:如硬盘、光盘、U盘等。
4.3 实战练习解析
下面以一个简单的例子,说明文件系统的实现过程。
# 定义文件系统类
class FileSystem:
def __init__(self):
self.files = {}
self.directories = {}
def create_file(self, file_name, content):
self.files[file_name] = content
def delete_file(self, file_name):
if file_name in self.files:
del self.files[file_name]
def create_directory(self, directory_name):
self.directories[directory_name] = []
def delete_directory(self, directory_name):
if directory_name in self.directories:
del self.directories[directory_name]
def list_files(self):
return list(self.files.keys())
def list_directories(self):
return list(self.directories.keys())
# 测试文件系统
if __name__ == "__main__":
fs = FileSystem()
fs.create_file("example.txt", "这是一个示例文件。")
fs.create_directory("test")
print("文件列表:", fs.list_files())
print("目录列表:", fs.list_directories())
fs.delete_file("example.txt")
print("文件列表:", fs.list_files())
fs.delete_directory("test")
print("目录列表:", fs.list_directories())
在上面的例子中,我们定义了一个简单的文件系统,它支持创建、删除文件和目录。运行结果如下:
文件列表: ['example.txt']
目录列表: ['test']
文件列表: []
目录列表: []
5. 输入/输出设备管理
输入/输出设备管理是操作系统核心功能之一,主要涉及设备的分配、控制和数据传输等方面。
5.1 设备的概念
设备是计算机系统中用于输入、输出数据的物理实体,如键盘、鼠标、显示器、硬盘等。
5.2 设备分配策略
设备分配策略是指操作系统如何将设备分配给进程。常见的设备分配策略有:
- 分时分配:如轮询分配、优先级分配等。
- 分块分配:如固定分区分配、可变分区分配等。
5.3 实战练习解析
下面以一个简单的例子,说明设备分配的实现过程。
# 定义设备类
class Device:
def __init__(self, device_id):
self.device_id = device_id
self.is_allocated = False
def allocate(self):
self.is_allocated = True
def deallocate(self):
self.is_allocated = False
# 定义进程类
class Process:
def __init__(self, device_ids):
self.device_ids = device_ids
# 定义设备管理器类
class DeviceManager:
def __init__(self, device_count):
self.devices = [Device(i) for i in range(device_count)]
self.process_table = {}
def allocate_device(self, process):
for device_id in process.device_ids:
if not any(device.is_allocated for device in self.devices):
break
for device in self.devices:
if not device.is_allocated:
device.allocate()
self.process_table[device_id] = process
break
def deallocate_device(self, process):
for device_id in process.device_ids:
if device_id in self.process_table:
self.process_table[device_id].deallocate_device()
# 测试设备管理
if __name__ == "__main__":
device_manager = DeviceManager(3)
process1 = Process([1, 2])
process2 = Process([3, 4])
device_manager.allocate_device(process1)
device_manager.allocate_device(process2)
for device_id, device in device_manager.process_table.items():
print(f"设备 {device_id}: {device.is_allocated}")
device_manager.deallocate_device(process1)
for device_id, device in device_manager.process_table.items():
print(f"设备 {device_id}: {device.is_allocated}")
在上面的例子中,我们定义了一个简单的设备管理器,它使用简单的分时分配策略。运行结果如下:
设备 1: True
设备 2: True
设备 3: False
设备 4: False
设备 1: False
设备 2: False
设备 3: False
设备 4: False
