操作系统复习1(超级干货)

目录

一. 操作系统概念

1.1 操作系统类型

1.2 操作系统操作和功能

1.2.1 操作系统操作

1.2.2 操作系统功能

二. 操作系统结构

2.1 操作系统服务和接口

2.1.1  操作系统服务

2.1.2 操作系统接口

2.2 操作系统结构

2.2.1 层次结构

2.2.2 微内核结构

2.2.3 模块结构

2.3 虚拟机

2.3.1 Java虚拟机

2.3.2 工作站虚拟机

2.3.3 服务器虚拟机

三. 进程(Process)

3.1 进程概念

3.1.1 内存中的进程内容:

 3.1.2 进程的状态

 3.1.3 进程控制块(PCB)

3.2 进程操作

3.2.1 进程创建

3.2.2 进程终止

3.3 进程通信(IPC)

3.3.1 共享内存(生产&消费)

3.3.2 消息传递

四. 线程(Thread)

4.1 线程概念

4.1.1 线程和进程区别

 4.1.2 线程结构

4.1.3 线程优点

4.2 多线程模型

4.2.1 线程类别

4.2.2 模型类别

4.3 线程库


一. 操作系统概念

操作系统是管理计算机硬件的程序,是用户和计算机硬件间的中介。其核心目标是为了运行用户程序,让用户更方便使用计算机,让系统更高效使用计算机。

1.1 操作系统类型

类型场景例子
大型机系统

简单批处理系统

多道程序系统

分时系统

IBM AIX

IBM z/OS

HP-Unix

桌面系统PC

Windows

Linux

Mac OS

移动系统手机、平板

Apple iOS

Google Android

嵌入系统单片机Redhat Linux
分布式系统网络分布设备

P2P

C-S

1.2 操作系统操作和功能

1.2.1 操作系统操作

  • 双重模式操作

双重模式包括用户模式(User mode)内核模式(kernel mode)

用于解决软件错误或特定请求产生异常或陷阱,以及其他进程问题:如死循环等。

采用双重模式操作允许OS保护自身和其他系统部件,模式位由硬件提供。内核模式可运行特权指令,但可能会引起系统崩溃。

模式转换:如果用户程序需要用特权指令,采用系统调用(System Call),视为软件中断。

  • I/O和内存保护

I/O保护:OS将所有I/O指令设计为特权指令,防止用户程序执行非法I/O,用户程序通过系统调用进行I/O操作。

内存保护:OS设计了存储保护机制,防止内存非法访问

  • 定时器(Timer)

如果操作系统不能获得CPU控制权,就无法管理系统。

这会导致1.用户程序死循环;2.用户程序不调用系统调用。

定时器的设置让发生中断一段时间后,CPU控制权返回操作系统。定时器可采用固定时间和可变时间,具体利用时钟计数器实现。

1.2.2 操作系统功能

  • 进程管理

操作系统的核心目标是运行程序,而进程就是运行中的程序。

具体内容包括:创建和删除用户和系统进程、暂停和恢复进程、提供进程同步机制、提供进程通信机制、提供死锁处理机制。

  • 内存管理

内存是程序运行必须的存储设备,CPU只能直接访问寄存器高速缓存内存,一般程序处理前和处理后的所有数据,包括程序执行的指令都在内存。

内存管理提供了内存的分配、回收、地址转换、共享和保护等功能。通过内存管理可以提高内存利用率内存访问速度

  • 文件管理

文件管理以文件为单位,以目录为组织方式构建文件系统,解决信息在计算机中存储问题。

主要内容包括:文件逻辑结构、文件物理结构、文件检索方法、文件操作、空闲空间管理、存储设备管理。

  • I/O设备管理

管理种类繁多的各种I/O设备,解决计算机中信息的输入和输出问题。操作系统管理I/O设备的关键是设备无关性。无关性体现在三个方面:1.所有物理设备按照物理特性抽象为逻辑设备;2.应用程序针对逻辑设备编程;3.应用程序和物理设备无关

二. 操作系统结构

2.1 操作系统服务和接口

2.1.1  操作系统服务

操作系统以服务形式向程序和用户提供环境执行程序

基本服务用户界面、程序执行、I/O 操作、文件系统操作、通信、错误检测
增值服务资源分配、统计、保护和安全

2.1.2 操作系统接口

下图展示了操作系统整体架构,除了基本服务和增值服务外,操作系统还提供了系统调用(System Call)、用户接口(User Interface)、系统程序(System Program)等操作接口。

以系统调用为例,操作系统服务提供了面向程序的编程接口,支持C or C++进行编写,程序通过应用程序接口(API)访问。

下图为Win32 API中ReadFile()方法 ,从文件读取内容。

2.2 操作系统结构

早期操作系统的结构单一简单,功能有限。随着时代发展,操作系统逐渐成长,规模越来越大,功能越来越丰富。

2.2.1 层次结构

操作系统划分为若干层,在低层上构建高层,底层(0层)为硬件,最高层( N层)为用户层,并且每层只使用低层次的功能和服务。优点:简化了系统设计和实现,便于调试和升级维护;缺点:层定义困难,效率差。

2.2.2 微内核结构

微内核主要解决内核越来越大,越来越难管理的问题。微内核即内核微型化,核内移出尽可能多功能到用户空间。

微内核结构的几点好处:

  • 便于扩充
  • 便于移植操作系统到新架构系统上
  • 更稳定安全 (更少的代码运行在核心态)

内核微缩也会带来一个坏处:用户空间和内核空间通信的系统开销增加。

2.2.3 模块结构

大部分现代操作系统都采用模块结构,模块化使用面向对象方法,每个核心部件分开,模块间通过接口进行会话,每个模块在需要时被加载到内核。相比于层次结构,模块化的设计更加灵活。

2.3 虚拟机

虚拟机是一种通过软件模拟实现,具有完整硬件系统功能,并运行在一个完全隔离环境中的完整计算机系统。虚拟机建立在物理计算机资源共享的基础上,并且虚拟机之间相互独立。按照使用场所和目的的不同,虚拟机可以大致分类为三类:高级语言虚拟机工作站虚拟机服务器虚拟机。虚拟机有两种连接模式:1.软件形式,eg.远程桌面;2.硬件模式,eg.虚拟机终端。

2.3.1 Java虚拟机

可运行Java代码的假想计算机,只要根据JVM规格将解释器移植到特定的操作系统上,就能运行经过编译的任何Java代码

2.3.2 工作站虚拟机

工作站虚拟机是操作系统上的虚拟机。按照安装位置可分为:宿主操作系统(Host OS)和客户操作系统(Guest OS)。其中宿主OS安装在硬件上,客户OS安装在操作系统上。

工作站虚拟机安装在宿主OS上,在工作站虚拟机中可以安装客户OS。常见的虚拟机工作站软件有:VMWare Station、Virtual Box、Virtual PC、Parallels Desktop。

如下图所示,使用工作站虚拟机可以同时在一个计算机上使用多个操作系统,一个宿主操作系统,若干个客户操作系统。

2.3.3 服务器虚拟机

服务器虚拟化:将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器。

常用的服务器虚拟模式有两种:

  • 一虚多:一台服务器虚拟成多台服务器虚拟机
  • 多虚一:多个独立物理服务器虚拟为一个服务器虚拟机

服务器虚拟化的优点有以下几点:安全性好、资源共享、可扩展性好、便于隔离、相价比高

三. 进程(Process)

3.1 进程概念

进程是指OS执行的各种程序,比如批处理系统中的作业(Job)、分时系统中的任务(Task)。作业即被组装成一个整体运行的一组计算步骤;任务指进程或线程。也有说法表示进程是一个程序在一个数据集上的一次运行。进程的执行必须以顺序方式进行。

3.1.1 内存中的进程内容:

  1. 代码(Text)
  2. 当前活动:
  • 程序计数器(PC)-指向当前要执行的指令(地址)
  • 堆栈(Stack):存放函数参数、临时变量等临时数据
  • 数据(Data):全局变量,处理的文件
  • 堆(Heap):动态内存分配

Tips:进程与程序的关系

  • 进程是程序的一个实例,是程序的一次执行
  • 一个程序可对应一个或多个进程,同样一个进程可对应一个或多个程序
  • 程序是进程的代码部分
  • 进程是活动实体,程序静止(被动)实体
  • 进程在内存,程序在外存

 3.1.2 进程的状态

 进程在执行的过程中,状态会发生多次转变。进程的状态一共可分为5类。不同状态间的转换逻辑如变化图所示。

  • 新建(new):在创建进程
  • 运行(running):指令在执行
  • 等待(waiting):进程等待某些事件发生
  • 就绪(ready):进程等待分配处理器
  • 终止(terminated):进程执行完毕

 3.1.3 进程控制块(PCB)

进程状态Process state
程序计数器Program Counter (PC)
进程号Process number
CPU寄存器CPU register
内存管理信息memory limits
计账信息list of open files
I/O状态信息I/O condition

3.2 进程操作

3.2.1 进程创建

上图是由一个父进程"Sched"创建子进程,并不断轮流创建进程下去,构成的一棵进程树。

Tips : 父子进程的关系

资源共享

  • 父进程子进程共享所有的资源
  • 子进程共享父进程资源的子集

  • 父进程和子进程无资源共享

执行

  • 父进程和子进程并发执行
  • 父进程等待,直到子进程终止

3.2.2 进程终止

正常进程执行最后一项并退出(exit)。如果是子进程,则从子进程向父进程输出数据(通过wait);如果不是子进程,操作系统收回进程的资源。

父进程可中止(abort)子进程的执行。中止的原因有以下几点:1. 子进程超量分配资源;2. 赋予子进程的任务不再需要;3. 父进程结束,所有子进程终止——级联终止。

父进程可以调用wait()系统等子进程结束。

3.3 进程通信(IPC)

独立进程:不会影响另一个进程的执行或被另一个进程执行影响。

协同进程:可能影响另一个进程的执行或被另一个进程执行影响。

进程协同的优点:信息共享加速运算模块化

进程通信可以同步进程间的活动,具体有两种基本模式:共享内存消息传递。

3.3.1 共享内存(生产&消费)

场景:一块内存在多个进程间共享,通信由应用程序自己控制。

实现手段:文件映射、管道、剪贴板

P进程生产供C进程消费的信息。对缓冲区大小限制的有无可分为:无界缓冲和有界缓冲。下面将介绍内存共享通信的经典案例——生产者-消费者问题

有界缓冲设有缓冲区大小buffer_size,缓冲区空位指针,和缓冲区非空位指针,最多可以填满buffer_size-1个项。

#define BUFFER_SIZE 10 //设置有界缓冲

Typedef struct {
	. . .
} item;

item buffer[BUFFER_SIZE];
int in = 0;    //in指向缓冲区中下一个空位
int out = 0;    //out指向缓冲区中第一个非空位

生产者进程,一边生产信息,一边观察缓存区产品数量是否溢出。

item nextProduced

while (true) {
/* Produce an item in nextProcuded */
    while (((in = (in + 1) % BUFFER SIZE count)  == out);   
    /* do nothing -- no free buffers */
    buffer[in] = nextProduced;
    in = (in + 1) % BUFFER SIZE;
}

消费者进程,一边观察缓存区是否还有产品,一边消费产品。

item nextConsumed

while (true) {
    while (in == out);
    // do nothing -- nothing to consume

	// remove an item from the buffer
    nextConsumed = buffer[out];
    out = (out + 1) % BUFFER SIZE;
    /* consume the item in nextConsumed*/
   }

3.3.2 消息传递

远程通信无法采用共享内存,需要通过发送&接受两个操作来完成进程间的通信。

若进程P与Q要通信,需要1.建立通信连接,2.通过send/receive交换消息。

通信连接的实现可通过物理的(如共享存储,硬件总线)和逻辑的(如逻辑特性)。

直接通信

进程以显式的命名进行通信,如

  • send (P, message) ——向进程P发消息
  • receive(Q, message) ——从进程Q收消息

直接通信的特点:1.连接自动建立;  2.连接精确地与一对通信进程相关

                             3.在每一对通信进程间存在一个连接; 4. 连接可单向,但通常双向

间接通信

消息导向至信箱并从信箱接收,每一个信箱有一个唯一的id,仅当共享一个信箱时进程才能通信。

  • send(A, message) – 发送消息到信箱 A
  • receive(A, message) – 从信箱 A接收消息

间接通信的特点:1.仅当进程共有一个信箱时连接才能建立; 2.连接可同多个进程相关

                             3.每一对进程可共享多个通信连接; 4.连接可是单向或双向的

Tips : 消息传递可阻塞(blocking)或非阻塞(non-blocking)

阻塞——同步:

  • 阻塞send:发送进程阻塞,直到消息被接收
  • 阻塞receive:接受者进程阻塞,直到有消息可用

非阻塞——异步:

  • 非阻塞send:发送进程发送消息并继续操作
  • 非阻塞receive: 接收者收到一个有效消息或无效消息

四. 线程(Thread)

OS引入线程有三方面的原因,一是性能角度,进程操作系统开销太大,需要进一步加速进程的运行;二是应用角度,存在进程代码并发执行的需求,eg.PPT编辑需要同时进行输入/拼写检查/存盘;三是硬件角度,多核处理器的出现为线程提供了物理土壤。

4.1 线程概念

线程是可在CPU上运行的基本执行单位进程内的一个代码片段可以被创建称为一个线程。

线程状态:就绪、运行、等待

线程操作:创建、撤销、等待、唤醒

需要注意的是进程依旧是资源分配的基本单位,线程自己不拥有系统资源,通过进程申请资源。

4.1.1 线程和进程区别

比较角度进程线程
代码进程包含线程线程是进程中的一段代码
资源进程是资源分配基本单位线程不拥有资源,共享使用进程的资源
调度同一进程中的线程切换不会引起进程切换线程是基本调度单位
切换进程:重量级上下文切换,代价大线程:轻量级切换,代价小
生命期进程撤销会导致它的所有线程被撤销线程撤销不会影响进程

 4.1.2 线程结构

代码、数据以及各类资源都来自进程。

线程控制块(Thread Control Block,TCB),包括:线程ID、程序计数器PC、寄存器集、栈空间

  • 单线程:一个进程只有一个线程
  • 多线程:一个进程有多个线程

Windows 线程数据结构

  • 执行线程块(Executive thread block):对应程序地址、指向KTHREAD指针、内核空间
  • 核心线程块(Kernel thread block):线程调度和同步信息、内核空间
  • 线程环境块(Thread environment block):用户空间的数据结构,线程本地存储

4.1.3 线程优点

  1. 响应度高,线程创建开销小。
  2. 资源共享,进程中的线程可以共享进程资源。
  3. 经济性高,线程创建、上下文切换比进程快。

4.2 多线程模型

4.2.1 线程类别

用户线程:由用户线程库进行管理的线程

用户线程有以下特点:1.内核看不到用户线程;2.用户线程的创建和调度在用户空间中,不需要内核的干预;3.应用于传统的只支持进程的操作系统

内核线程:内核进行管理的线程

内核线程有以下特点:1.需要内核支持; 2.由内核完成线程调度;3.由内核进行创建和撤销。

4.2.2 模型类别

 按照内核与线程数量的对应关系可分为:一对一模型多对一模型多对多模型

一对一模型:用户线程映射到内核线程,操作系统管理这些线程。

优点:并发性好,多个线程可并行运行在多个处理器上。

缺点:内核开销大。

多对一模型:内核只有进程,并且只看到一个进程。应用在比较落后的OS上。

多对多模型:多个用户线程映射为相等或更小数目的内核线程

优点:并发性和效率兼顾。        缺点:复杂度增加。

4.3 线程库

线程库为程序员提供API来创建和管理线程。

  • 用户库(用户线程):存在于用户空间,没有内核支持,调用线程库不会产生系统调用。
  • 内核库(内核线程):存在于内核,内核支持,调用线程库会产生系统调用。

复习资料二:操作系统复习2

复习资料三:操作系统复习3

复习资料四:操作系统复习4

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恭仔さん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值