type
status
date
slug
summary
tags
category
icon
password
💯
这里写文章的前言: 提交的文档原样复制过来了,可能会有疏漏。
 

2024卓中卓综合性测试 项目报告

任务一:尝试结合开源代码来分析子系统的关键工作原理

概念辨析及特点概要

  • 应用子系统:该方法在操作系统内部实现了另一个操作系统的运行环境,使得原本不兼容的应用程序可以在其中运行。这个子系统通常包含对目标操作系统的API调用的翻译或适配层。
    • 例如,Windows操作系统中的Linux子系统(WSL)就是一个应用子系统,它通过对Linux系统调用的翻译,使得在Windows环境下可以运行许多Linux应用程序。
  • 模拟器:模拟器是一个完全独立于宿主操作系统的软件,它模拟了目标操作系统的全部硬件和软件环境。当在模拟器中运行目标操作系统时,所有的系统调用都会被模拟器拦截并转发到宿主操作系统上。这种方法的优势在于能够实现更高的兼容性,但性能开销通常也更高。-
    • 例如,QEMU就是一个广泛使用的开源模拟器,它可以模拟多种不同的硬件平台和操作系统。
  • 兼容层:兼容层是一个介于应用程序和操作系统之间的软件层,它提供了目标操作系统所需的API接口,但实际上将这些接口转换为宿主操作系统的对应接口。兼容层的实现通常涉及对系统调用的拦截和转发,以及对数据格式和协议的转换。
    • 例如,Wine就是一个用于在Linux系统上运行Windows程序的兼容层,它通过实现Windows API接口的模拟来实现对Windows程序的兼容性。

举例介绍

以Wine为例

dlls/ 目录:
这个目录包含了 Wine 实现的各种 Windows 动态链接库(DLL),每个子目录对应一个 Windows DLL,负责实现特定的 Windows API 功能。常见的 DLL 目录包括 kernel32user32gdi32advapi32 等,它们实现了大量的核心 Windows API。
include/ 目录:
该目录包含了 Wine 使用的头文件,定义了许多 Windows API 函数和结构。这些头文件通常是从 Windows SDK 头文件中复制并修改而来,以便在 Wine 中使用。
其中,在dlls/kernel32目录
包含了process.c``path.cfile.cthread.c等负责进程调度、路径操作、文件操作、线程管理等模块的具体内容。

关键工作原理分析

  • 实现功能方面,应用子系统、模拟器、兼容层都实现了在宿主操作系统上通过对应方式运行原本非兼容的程序类型。
  • 工作方式方面,应用子系统内部实现了一个供给程序调用的运行环境;模拟器模拟了目标程序全套的运行环境、兼容层则是实现了程序所需接口和宿主系统接口的转换匹配。

任务二:分析Linux和Windows两种系统在文件操作上的异同

说明:由于Windows项目非开源,因此本任务在讨论"Windows"时,一般指向的是以模拟Windows环境为宗旨的开源项目"ReactOS"。
  • 文件系统方面
    • 文件系统结构:
      Windows结构的文件目录以磁盘名起始,如C:\,Linux系统则是根目录/
      文件路径:
      Windows系统采用反斜杠”\“作为分隔符,Linux采用正斜杠”/“作为分隔符
      文件权限:
      Windows的文件权限基于访问控制列表(ACL),Linux的权限系统基于用户、用户组管理。
  • 实现细节方面
    • 实现逻辑:
      Windows系统下,文件操作通过 I/O 管理器进行调度,使用 IRP(I/O 请求包)来表示操作请求。
      Linux系统采用VFS层(虚拟文件系统)对文件系统差异进行抽象,将文件操作的接口进行统一
      文件系统驱动:
      目前来说,Windows主要采用的是NTFS文件系统、ReactOS采用的是较早期的FAT32文件系统,而Linux主要采用ext4文件系统。
      调用接口:
      Windows下,用户空间的应用程序通过 Win32 API 发出文件操作请求,如 CreateFile、ReadFile、WriteFile、DeleteFile 等。这些 API 调用最终会通过内核模式转换为系统调用,由内核和文件系统驱动程序处理。
      Linux下,用户空间的应用程序通过 POSIX 标准接口进行文件操作,如 openreadwriteunlink 等。这些接口通过系统调用传递到内核,内核中的系统调用处理函数负责相应操作。

任务三:在Linux系统上使用C语言编写一个简单的文件操作兼容层将Windows的文件操作转换或翻译为Linux 的文件操作。

问题分析

实现兼容层的具体方式为:将Windows下所需的API接口转换为Linux的对应接口。主要设计细节涉及对系统调用的拦截、处理和转发。实际实现上,发现拦截系统调用的实现对问题解决贡献较小,因此采用直接运行可执行文件并在其内部对Windows文件操作命令进行输入并进行字符串转化并执行的方式实现。
以下是Windows系统和Linux系统下常用文件操作命令的对应关系:

文件操作命令对应表

操作
Windows 命令
Linux 命令
列出目录
dir
ls
切换目录
cd
cd
- 创建目录
mkdir
mkdir
删除目录
rmdirrd
rmdirrm -r
复制文件
copy
cp
- 移动文件
move
mv
- 删除文件
delerase
rm
- 重命名文件
renameren
mv
- 查看文件内容
type
cat
查找文件
dir /ssearch
findfind .
比较文件
fc
diff
更改文件权限
attrib
chmod
更改文件所有者
不适用
chown
以上述带有” - “字符的功能举例,参考程序及演示视频见附件。

任务四:基于业界现状和上述研究与模拟操作实现,阐述上述技术路线存在哪些问题或缺陷

业界现状

  • 开源技术、包括其衍生出的发展程度高的开源社区较少。
  • 除大众常用系统(Windows、Linux)之外,业界对于小众操作系统的原生开发支持率不高,兼容层设计程度较低。
  • 大型开源项目上手门槛高,小型开源项目实现完成度低,兼容技术容易”进退维谷“。

具体操作

  • 设计兼容层或应用子系统需要对两门及以上的操作系统具有较高的熟悉程度和应用经验。想要保证较高兼容性和易用性需要大量时间和算法成本。
  • 虚拟机服务所占用的存储空间较大,性能要求过高,不能满足轻量化、高效能的功能需求。例如嵌入式操作系统。
  • 对于命令操作的逐个映射工作量较大。部分操作命令不存在映射

总结

随着未来万物互联时代的到来,生产生活中不可避免地会遇到越来越多跨设备、跨平台、跨服务的情况。在构建兼容层时,编译器技术可用于生成中间代码或目标代码。例如,Wine可以通过拦截系统调用并将其翻译成Linux调用来实现兼容性等。因此学习掌握这类技术与我院卓中卓班立足时代需求,培养核心人才的初衷相符。
在本轮的综合性测试中,我的阅读分析、资料搜索、思路构建、大胆创新等能力都得到了锻炼,同时也要感谢同我一起分享交流的幸旭鑫同学和张尧杰同学。
参考资料:
CSDN开发者社区:https://www.csdn.net
百度开发者社区:https://developer.baidu.com/
 
 
第一篇文章编译技术学习-词法分析
Loading...
XiaoYi
XiaoYi
一个摆烂电兵⚡
Announcement

🧑‍🦽冲刺!冲刺!冲! 🧑‍🦽

🌈 欢迎光临我的博客!