table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}
66、用高级语言(如C语言)编写操作系统有哪些优缺点?
优点:
现代编译器能进行复杂分析和应用复杂优化来生成出色代码
现代处理器能更轻松处理复杂依赖细节
操作系统的主要性能提升更可能源于更好的数据结构和算法,而非优秀的汇编代码
编写完成并正确运行后,可识别瓶颈程序并用汇编语言等效程序替换
缺点:
速度降低和存储需求增加
但在当今系统中这些不再是主要问题
67、实现计算机间文件传输程序应使用哪种套接字类型?用于定期测试网络中另一台计算机是否在线的程序应使用哪种类型?请解释你的答案。
实现计算机间文件传输程序应使用面向连接的(TCP)套接字。因为文件传输需要保证数据的完整性和顺序性,TCP 提供可靠的、面向连接的通信,能确保数据准确无误地从源端传输到目的端,它会处理数据的分段、排序、重传等问题,适合对数据准确性要求高的文件传输场景。
用于定期测试网络中另一台计算机是否在线的程序应使用无连接的(UDP)套接字。因为该程序只需要简单地发送一个测试消息并等待响应,不需要建立复杂的连接,UDP 开销小、速度快,不保证数据的可靠传输,但对于这种简单的测试场景,能快速发送和接收消息,满足定期检测的需求。
68、Linux内核在加载内核模块时使用的冲突解决机制的主要目标是什么?
该机制允许不同的设备驱动程序预留硬件资源,并保护这些资源不被其他驱动程序意外使用。
69、Linux操作系统的目录结构可能包含对应几种不同文件系统的文件,包括Linux的/proc文件系统。支持不同文件系统类型的需求会如何影响Linux内核的结构?
虚拟文件系统(VFS)的作用与功能
为支持不同文件系统类型,Linux内核采用虚拟文件系统(VFS)层。
核心机制
接口抽象
VFS将通用文件系统操作与其实现分离,定义清晰接口,使不同类型文件系统能在同一结构中实现。
唯一标识机制
提供在网络中唯一表示文件的机制,基于
vnode
结构区分本地和远程文件及本地不同文件系统类型。
操作处理方式
本地请求处理
VFS根据文件系统类型激活特定操作处理本地请求。
远程请求处理
调用NFS协议程序处理远程请求。
70、Linux的setuid特性与标准Unix的setuid特性有哪些不同?
Linux 对标准 Unix 的
setuid
机制进行了两方面增强:
实现了 POSIX 规范的保存用户 ID(saved user ID)机制
允许进程反复放弃和重新获取其有效 UID(Effective UID),且无需修改实际 UID(Real UID)。
增加了进程特性:
fsuid
和
fsgid
用于授予文件访问权限,它们可以独立于有效 ID 设置,使进程能代表其他用户访问文件,而无需承担有效 UID 的全部权利。
71、对象管理器的工作是什么?
对象管理器的工作包括:
检查进程访问对象的权限
执行配额管理,如根据进程引用对象占用的内存收费,超出配额时拒绝分配更多内存
跟踪每个对象的句柄数量和引用指针数量
维护Windows内部命名空间,支持目录和符号链接
对象类型指定实例分配方式、数据字段定义和标准虚拟函数实现,标准函数执行如名称映射、关闭删除、安全检查等操作
提供
parse()
函数以实现对象,扩展Windows命名空间
72、I/O管理器的职责是什么?
I/O管理器负责管理文件系统、设备驱动程序和网络驱动程序。它跟踪哪些设备驱动程序、过滤驱动程序和文件系统已加载,还管理I/O请求的缓冲区。
它与VM管理器协作以提供内存映射文件I/O,并控制Windows缓存管理器,该管理器处理整个I/O系统的缓存。
I/O管理器本质上是异步的,通过显式等待I/O操作完成来提供同步I/O。它提供多种异步I/O完成模型,包括:
设置事件
在调用进程中更新状态变量
向发起线程传递APC
使用I/O完成端口
这允许单个线程处理来自许多其他线程的I/O完成。
73、Windows支持哪些类型的网络?Windows如何实现传输协议?请描述两种网络协议。
Windows网络连接支持
Windows支持多种网络连接场景。Windows将传输协议实现为驱动程序,这些驱动程序可动态加载和卸载,但实际操作中更改后通常需重启系统。
网络协议
1. 服务器消息块(SMB)协议
起源
:最早在 MS-DOS 3.1 中引入。
功能
:用于通过网络发送 I/O 请求。
消息类型
:
会话控制消息
文件消息
打印机消息
消息消息
发展
:其一个版本作为通用互联网文件系统(CIFS)发布,被多种操作系统支持。
2. 传输控制协议/互联网协议(TCP/IP)
地位
:是互联网上使用的协议套件,已成为事实上的标准网络基础设施。
用途
:Windows 使用 TCP/IP 连接各种操作系统和硬件平台。
TCP/IP 包含
:
简单网络管理协议(SNMP)
动态主机配置协议(DHCP)
旧的 Windows 互联网名称服务(WINS)
改进
:
Windows Vista 引入了支持 IPv4 和 IPv6 的新实现。
支持将网络栈卸载到高级硬件以实现服务器的高性能。
其他网络功能
软件防火墙
:Windows 提供软件防火墙限制程序用于网络通信的 TCP 端口。
74、NTFS命名空间是如何组织的?
与UNIX一样,NTFS命名空间被组织成目录层次结构。每个目录使用一种称为B+树的数据结构来存储该目录中文件名的索引。
75、NTFS 如何处理数据结构?NTFS 如何从系统崩溃中恢复?恢复后能保证什么?
NTFS 数据恢复机制
NTFS 采用事务日志方案处理数据结构。系统崩溃时,通过以下方式恢复:
重做已提交事务的操作
撤销崩溃前未成功提交事务的操作
日志记录与检查点
定期(通常每 5 秒)将检查点记录写入日志
系统恢复时无需检查点之前的日志记录,可将其丢弃
该机制避免日志文件无限增长
文件系统恢复
系统启动后首次访问 NTFS 卷时,NTFS 会自动执行文件系统恢复
恢复后不能保证所有用户文件内容正确
仅确保文件系统数据结构(元数据文件)未损坏
并反映崩溃前存在的某种一致状态
76、Windows如何分配用户内存?
Windows内存分配方式概述
Windows的Win32 API为应用程序提供了多种使用内存的方式来分配用户内存,包括:
虚拟内存
内存映射文件
堆
线程本地存储
虚拟内存
在虚拟内存方面,应用程序调用
VirtualAlloc()
来预留或提交虚拟内存,调用
VirtualFree()
来取消提交或释放内存。这些函数能让应用程序指定内存分配的虚拟地址,且以内存页面大小的倍数进行操作。
内存映射文件
在内存映射文件方面,应用程序可将文件内存映射到其地址空间,这也是两个进程共享内存的便捷方式。内存映射是一个多阶段过程。
77、描述应用程序通过Win32 API使用内存的一些方式。
应用程序通过 Win32 API 使用内存的方式主要有以下几种:
虚拟内存
应用程序调用
VirtualAlloc()
来保留或提交虚拟内存,调用
VirtualFree()
来解除提交或释放内存,还可调用
VirtualLock()
将已提交的部分页面锁定到物理内存中。
内存映射文件
将文件映射到进程的地址空间,这也是两个进程共享内存的便捷方式。
堆
Win32 进程初始化时会创建一个默认堆,Win32 提供了多个堆管理函数,如
HeapCreate()
、
HeapAlloc()
等,还提供了
HeapLock()
和
HeapUnlock()
函数用于线程对堆的独占访问。
线程本地存储(TLS)机制
为应用程序使用内存提供了另一种方式。
78、描述虚拟内存管理器的管理方案。虚拟内存管理器如何提高性能?
管理方案与性能优化
管理方案
管理已提交内存
同时管理每个进程的保留内存(虚拟地址空间)
每个进程拥有相关树结构,用于描述虚拟地址的使用范围和用途
可按需调入页表页
若页表项未初始化:
在进程的虚拟地址描述符树中搜索地址
填充页表项并检索页面
在某些情况下:
需要透明分配和初始化页表项表页
或处理页面共享情况
提高性能的方式
利用线程内存引用的局部性
在调入一个页面时,同时调入几个相邻页面
减少总的缺页次数
将读取操作聚类
提高 I/O 性能
79、描述本地过程调用中用于传输数据的三种技术。不同的消息传递技术最适合在哪些场景中应用?
本地过程调用中用于传输数据的三种技术及适用场景
小消息传递技术
–
实现方式
:使用端口的消息队列作为中间存储,将消息从一个进程复制到另一个进程。
–
适用场景
:适用于发送不超过4KB的小消息。
大消息传递技术
–
实现方式
:通过节对象设置共享内存区域,客户端或服务器在建立通道时决定是否需要发送大消息,若需要则创建节对象。
–
适用场景
:适用于发送大消息,可避免数据复制。
回调机制
–
实现方式
:当客户端或服务器无法立即响应请求时使用,允许进行异步消息处理。
–
适用场景
:适用于需要异步处理消息的场景。
80、在Windows中由什么管理缓存?缓存是如何管理的?
在Windows中,缓存由
缓存管理器
(cache manager)管理。缓存管理器默认采用
写回缓存
(write-back caching),会累积4到5秒的写入操作,然后唤醒缓存写入线程。
若需要
直写缓存
(write-through caching),进程在打开文件时可设置标志,或调用显式的缓存刷新函数。
当空闲缓存内存量变低时,缓存管理器会暂时阻止试图写入数据的进程,并唤醒缓存写入线程将页面刷新到磁盘。
对于网络文件系统的网络重定向器,可指示缓存管理器限制缓存中的写入积压。
此外,缓存管理器还提供DMA接口,用于直接移动数据,避免通过中间缓冲区复制数据。
81、什么是进程,在Windows系统中进程是如何管理的?
进程的概念与管理
进程可以被看作是
正在执行的程序
。它需要一定的资源,如
CPU时间、内存、文件和 I/O 设备
等,这些资源在进程创建时或执行期间被分配给它。
在
Windows
中,操作系统负责与进程和线程管理相关的活动,包括:
创建和删除用户及系统进程
调度进程
提供用于进程同步、通信和死锁处理的机制
82、Windows 7中的用户模式调度(UMS)与纤程有何不同?纤程和UMS之间有哪些权衡?
不同点:
可靠性
:
– 纤程执行Win32 API不可靠,因为它们没有自己的线程环境块(TEB);
– UMS使用每个用户线程(UT)的TEB来唯一标识UT,更可靠。
调度控制
:
– 纤程运行的线程在内核中阻塞时,用户调度器会暂时失去对CPU的控制;
– UMS中,当UT进入内核,其对应的内核线程(KT)可能阻塞,内核会切换到调度线程,重新进入用户模式调度器选择另一个UT运行。
直接使用性
:
– 纤程可直接被程序员使用;
– UMS不打算由程序员直接使用,调度器来自基于UMS构建的编程语言库。
权衡:
纤程的优点
:便于移植使用用户模式线程模型编写的传统UNIX应用程序;
纤程的缺点
:执行Win32 API不可靠,调度时可能出现问题;
UMS的优点
:解决了纤程的一些局限性,提供了更可靠的调度机制;
UMS的缺点
:不适合程序员直接使用,编写用户模式调度器具有挑战性。
83、进程间通信的两种模型是什么?这两种方法的优缺点分别是什么?
进程间通信的两种模型
1. 消息传递
优点:
适用于交换少量数据
无需避免冲突
在计算机间通信中比共享内存更容易实现
缺点:
未提及
2. 共享内存
优点:
通信速度最快且方便
一旦建立共享内存区域,访问如同常规内存访问
无需内核干预
缺点:
需要进程自行确保不同时写入同一位置
需要多个进程同意移除操作系统对进程间内存访问的限制
84、解释为什么记录元数据更新能确保文件系统在崩溃后恢复。
记录元数据更新的方法
当使用记录元数据更新的方法时,所有元数据更改会顺序写入日志。
每个执行特定任务的操作集是一个事务。
写入日志后即视为已提交。
系统崩溃时的处理
日志文件会包含零个或多个事务。
那些已提交但未完成到文件系统的事务可从指针处继续执行直至完成,保证文件系统结构一致。
若事务在崩溃前未提交,其对文件系统所做更改会被撤销,同样维护了文件系统的一致性。
检查点记录
定期写入检查点记录。
系统恢复时无需检查点之前的日志记录。
可避免日志文件无限增长。