1. 操作系统基本概念
1.1 什么是操作系统
- 是运行在内核态的软件,是应用程序与硬件之间的媒介,帮助用户管理硬件资源
1.2 操作系统主要有哪些功能
-
处理器管理:CPU的分配和管理,主要指的是==进程管理==
-
内存管理:内存的分配和管理,主要用==虚拟内存==的方式
-
外存管理(硬盘管理):外存(硬盘等)的分配和管理,将外存以文件的形式提供出去
-
I/O管理:对输入/输出设备的统一管理
除此之外,还有:
-
保证自身正常运行的健壮性管理
-
防止非法操作和入侵的安全性管理(例如:段错误)
2. 操作系统结构
2.1 什么是内核
-
内核是一个计算机程序,是操作系统的核心
-
提供了操作系统最核心的功能,可以控制操作系统中所有内容
2.2 什么是用户态和内核态
-
内核具有很高的权限,可以控制CPU、内存、硬盘等硬件
-
考虑到权限控制,所以大多数的操作系统把内存分成了两个区域:
-
内核空间:只有内核程序可以访问
-
用户空间:专门给应用程序使用,权限比较小
-
-
-
用户空间的代码只能访问一个局部的内存空间
-
内核空间的代码可以访问所有内存空间
- 当程序使用用户空间时,就说这个程序在用户态执行,当程序使用内核空间时,说这个程序在内核态执行
2.3 用户态和内核态是如何切换的
- 通过系统调用(受限的内存访问)来切换
3. 进程和线程
3.1 并行和并发有什么区别
-
并发:
-
在==一段时间==内,多个任务都会被处理
-
但在==某一时刻==,只有一个任务在执行
单核处理器做到并发,其实是利用==时间片轮转==(CPU的分时复用),在宏观上表现为同时执行多条指令
-
-
并行:
-
==同一时刻==,多个任务同时执行
- 需要多核处理器才能实现
不同的程序被放到不同的处理器上运行,是物理上的多个进程同时运行
-
3.2 什么是进程的上下文切换
-
单核单线程CPU,某一时刻只能执行一条CPU指令
-
上下文切换:将CPU资源从一个进程分配给另一个进程的机制
-
==计算密集型任务==不适合上下文切换,所以不适合并发
-
并发的好处:比如一个程序需要经常读取数据(==I/O密集型任务==),在读取数据前无法进行运算,此时这个进程如果占用CPU就是对资源的浪费,可以在这个时间把CPU用于处理别的进程
3.3 进程有哪些状态
-
就绪态、阻塞态、运行态
-
就绪态(Ready):可运行,由于其他进程处于运行状态而暂时停止运行
-
阻塞态(Blocked):该进程正在等待某一事件发生(如等待输入/输出操作的完成)而暂时停止运行,这时,即使给它CPU控制权,也无法运行
-
运行态(Runing):该时刻进程占用CPU
后来又加了两个基本状态:
-
新建态(New):进程正在被创建时的状态
-
终止态(Exit):进程正在从系统中消失时的状态
3.4 什么是僵尸进程
-
已完成处于==终止状态==,但在==进程表==中仍然存在的进程
-
僵尸进程一般发生在有父子关系的进程中
-
一个子进程的==进程描述符==在子进程退出时不会释放,只有当父进程通过
wait()
或waitpid()
获取了子进程信息后才会释放 -
如果子进程退出,而父进程没有调用
wait()
或waitpid()
,那么子进程的描述符仍然保存在系统中
-
-
3.5 什么是孤儿进程
-
一个父进程退出,而它的子进程还在运行,这些子进程将成为孤儿进程
-
孤儿进程会被
init
进程(进程ID为1的进程)收养,并由init
进程完成对它们的==状态收集工作== -
因为孤儿进程会被
init
进程收养,所以孤儿进程不会对系统造成危害 -
操作系统的第一个进程是0号进程,干完活会结束,但是1号进程不会结束,它会等待孤儿进程并领养(注意:不同发行版本不一定保证孤儿进程被1号进程领养,例如Ubuntu)