# medical-os-labs-reference
**Repository Path**: observerw/medical-os-labs-reference
## Basic Information
- **Project Name**: medical-os-labs-reference
- **Description**: medical-os-labs的参考答案
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-05-26
- **Last Updated**: 2024-06-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 2024 空医操作系统课程实验
**本周实验:[点这里查看](./chapter-4/README.md)**
# (NEW!) 太长不看
- 每次实验课更新一章实验,文件夹名称为 `chapter-*`,做实验前阅读 `README.md`,然后补全 `src` 文件夹下所有 `TODO` 注释标注的地方的代码;
- 有问题在 gitee 仓库的 Issue 区提问;
- 完成一章实验后,记录运行结果,将实验报告提交到头歌;
# (NEW!) 实验安排
本实验总共分为四个章节,内容分别为:
- [实现单线程版本的问诊系统](./chapter-1/README.md);
- [实现多线程版本的问诊系统](./chapter-2/README.md);
- [实现基于线程池的问诊系统](./chapter-3/README.md);
- [对问诊系统进行性能优化](./chapter-4/README.md);
每节实验课更新一章实验,请在控制台输入如下命令获取最新的实验内容:
```sh
git pull
```
实验文件夹命名为 `chapter-*`,每个文件夹中包含如下内容:
- `README.md`:实验文档,包括实验内容、实验准备、实验要求等,请大家在完成实验前仔细阅读;
- `src`文件夹:实验源代码,包含了实验中需要补全的代码;
实验中需要完成的任务均用 `TODO` 注释进行了标注,比如:
请大家发挥聪明才智,按照实验要求补全代码,完成实验。我们也提供了一些例子供大家参考,这些例子使用 `EXAMPLE` 注释进行了标注,大家可以参考这些例子来完成实验。
怎么去寻找到这些 `TODO` 注释都在哪里?VSCode 提供了一个很好用的插件叫做 `TODO Tree`,安装后可以在侧边栏中看到所有的 `TODO` 注释,如下图所示:
点击相应的条目,即可跳转到对应的代码位置。
# (NEW!) 考核方式
在每节实验完成后,请同学们在头歌上完成实验报告,实验报告的内容包括:
1. 实验内容:
1. 对 `TODO` 部分补全后,**截图**或**复制**代码;
2. 附上简要的解释(这段代码实现了什么功能,是如何实现的);
2. 实验结果:对运行结果进行截图,每一章实验会有不同的实验结果展示要求,请按照要求进行展示;
**⚠️注意**:报告的内容力求精简,说明白即可,不用卷字数,字数多也不会加分。
**实验报告写在头歌的输入框中即可**,请不要单独写在 Word 文档中上传附件。
# (NEW!) 提问方式
完成实验免不了遇到很多奇奇怪怪的问题,这时候就需要大家积极提问了。我们希望大家尽量使用 [Gitee 仓库的 Issue 区](https://gitee.com/observerw/medical-os-labs/issues)进行提问:
点击“新建Issue”即可创建一个新的提问,请大家按照如下模板进行提问:
问题创建完成后,就可以在 Issue 区看到自己的提问了,助教将会尽快为大家解答;我们也希望同学们能够积极参与到解答问题的过程中,这样既能够加深自己对问题的理解,也能够帮助到其他同学。
此外,每个 Issue 还有一个”点赞👍”功能,如果你看到其他同学的提问帮助你解决了你的问题,请给他点个赞吧!提出获得赞最多的问题的同学,我们会酌情予以加分(但不过很少,所以不用在这里卷,请大家实事求是的提问和点赞)。
# 环境安装
为了完成实验,首先我们需要配置一个 Linux 编程环境。你可能会问,这个 Linux 是什么?我明明在 Windows 上也照样能编程,为什么要费力气安装 Linux?
首先,Linux 是一类操作系统的统称,划分到实际的操作系统上则有很多种,例如 Ubuntu、CentOS、Debian,甚至学校常用的银河麒麟等等;本实验中我们需要使用到的便是 Ubuntu 20.04 发行版。
Windows 系统是由微软公司所开发的,需要用户花钱购买;由于其出色的易用性,所以被我们广泛的应用在日常的工作生活中;而 Linux 系统则是开源的,任何人都可以免费的安装它;虽然 Linux 系统在日常使用上没有 Windows 方便,但它被广泛应用在服务器等领域,是我们日常生活中很多计算机系统的基石,可以说是计算机领域的“幕后功臣”。
至于为什么我们要在 Linux 上编程,原因可以说是一种“市场效应”:我们通常都会在 Windows 平台上打游戏,很少听说有人会在 Linux 或者 MacOS 上打游戏,正因如此,Windows 平台的游戏开发者也会更多,提供的支持也会更加完善;而在编程领域也是同样的道理,全世界数以千万计的程序员都在使用 Linux 平台进行开发和协作,形成了一种事实上的“标准”,作为计算机初学者的我们自然也要尝试融入其中。
安装并使用 Linux 系统也是本次实验的一部分,通过这一过程我们可以形成对 Linux 系统的初步认识,从而更广泛深入的理解计算机操作系统。
## WSL (Windows Subsystem for Linux)安装
本实验中我们会使用 WSL 作为 Linux 编程环境。WSL 是由微软提供的系统功能,可以让我们在 Windows 系统中安装一个 Linux 子系统,这样我们就不用装双系统/安装繁琐的虚拟机了,可喜可贺。
这里我们假设大家所使用的操作系统都是 Windows 10/11;**我们需要安装的Linux系统名为 Ubuntu 20.04**。
首先右键任务栏中的 Windows 图标,选择终端(管理员),复制运行以下命令:
```powershell
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform, Microsoft-Windows-Subsystem-Linux
```
随后重启电脑。重启完成后,请再次打开控制台,复制运行以下命令:
```powershell
wsl --set-default-version 2
wsl --update
wsl --install -d Ubuntu-20.04
```
**⚠️注意**:如果运行上述命令时发生了错误,请联系助教进行手动安装。
安装成功后,需要设置用户名和密码(请注意,密码在输入过程中不会显示,因此看不到密码不用慌张,照常输入即可):
当安装完成后,尝试在控制台中输入 `wsl`,如果出现以下界面,则说明安装成功:
PS:如果未来不再需要使用该环境,可以通过以下命令卸载(但做实验的时候先不要卸载):
```powershell
wsl --unregister Ubuntu-20.04
Disable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform, Microsoft-Windows-Subsystem-Linux
```
注意在上述命令执行后,其中的数据将会被删除,无法恢复;因此如果有重要的文件请预先进行备份。
## Visual Studio Code
Visual Studio Code(VSCode)([点击此处到官网下载](https://code.visualstudio.com/))是一款轻量级的代码编辑器,相较于 Visual Studio 这样完整的集成开发环境,VSCode 更加轻量,更加节省系统资源;此外,VSCode 拥有丰富且活跃的插件生态系统。本实验中我们需要使用 VSCode 连接到刚刚安装的 WSL 环境中进行编程。
下载安装完成后打开 VSCode,将会是类似于如下的界面:
界面包含的元素有:
首先点击侧边栏的扩展选项,下载 `WSL` 插件:
随后点击左下角的蓝色标志,选择“Connect to WSL”选项,连接到 WSL:
蓝色标志显示“Ubuntu-20.04”即代表连接成功:
然后选择 File-Open Folder,打开主目录(输入 `~`,会自动展开为主目录):
⚠️注意:**所谓的主目录其实就是 `/home/<你自己设置的用户名>`**,比如图中的 `/home/GK`;当你选择 Open Folder 后,如果显示的路径已经是主目录了,则直接点击 OK 即可;否则,请将路径整体替换为 `~` 符号(而不是在现有路径后添加 `~`)后点击 OK。
成功打开后,你将会看到类似如下的界面:
⚠️注意:接下来的实验中我们会跟VSCode常常打交道,所以**请大家尽快熟悉VSCode的使用方法**。如下两个快捷键请务必掌握:
- `Ctrl + P`切换文件;
- `Ctrl + Shift + P`打开命令面板,输入搜索想要执行的命令,比如打开文件夹、新建文件等等;
具体细节请参见:
- [VSCode官方文档](https://code.visualstudio.com/docs)
- [VS Code | 重新认识VSCode的界面](https://juejin.cn/post/7049371327089606692)
- [b站的众多VSCode教程](https://search.bilibili.com/all?vt=91048908&keyword=vscode%E6%95%99%E7%A8%8B)
## 常见问题
### 我的默认登录用户是root(运行 `whoami` 命令显示的是root),而不是我自己设置的用户名,该怎么办?
如果你现在已经是 root 账户,请在 WSL 环境打开路径为 `/etc/wsl.conf` 的文件,在其中找到:
```conf
[user]
default=root
```
将其修改为:
```conf
[user]
default=<你自己设置的用户名>
```
保存后重启 WSL 环境即可。
### 我还没有设置过自己的用户名和密码,该怎么办?
使用 root 账户登录,在控制台输入:
```sh
adduser <你自己设置的用户名>
```
创建完成后输入:
```sh
su <你自己设置的用户名>
```
即可切换到你自己设置的用户名下。
### 忘记密码怎么办?
参见[微软官方文档](https://learn.microsoft.com/zh-cn/windows/wsl/setup/environment#set-up-your-linux-username-and-password)。
### 我的C盘空间不够,想把WSL安装到D盘,该怎么办?
- 对于当前还没有在C盘中安装过,想要在其他盘中从头安装的情况,请首先请将 `Ubuntu-2004.AppxBundle` 文件保存在某个位置;然后将这个文件的后缀名修改为 `.zip`(不知道如何修改后缀名,请[参见该文档](https://support.microsoft.com/zh-cn/windows/windows-%E4%B8%AD%E7%9A%84%E5%B8%B8%E8%A7%81%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D-da4a4430-8e76-89c5-59f7-1cdbbc75cb01)),然后**解压到你想要安装的盘中**(比如想安装在D盘就解压到D盘中)。解压完成后你将会看到一个文件夹,将其中名为 `Ubuntu_2004.2021.825.0_x64.appx` 的文件修改后缀名为 `.zip`,解压到当前文件夹中。再次打开,你将会看到其中包含一个名为 `Ubuntu.exe` 的文件,双击运行该文件,按照要求设置用户名和密码即可。
- 对于目前已经安装到C盘,但想要将其迁移到其他盘的情况,请参考:[wsl安装到非C盘解决方案](https://zhuanlan.zhihu.com/p/419242528);
### 我还有其他问题……
请将出现问题的界面截图(最好不要手机拍屏),私信联系助教。
# 实验准备
## 安装编译环境
请打开控制台:
在控制台中输入执行如下命令,打开 `install.sh` 文件:
```sh
touch ~/install.sh && code ~/install.sh
```
将安装脚本的内容([点击此处查看](scripts/install.sh))复制进去,**按Ctrl + S保存**(注意不保存执行不了),随后在控制台中输入以下命令:
```sh
sudo chmod +x ~/install.sh && ~/install.sh
```
其中的 `sudo` 代表以管理员权限运行,因此系统可能会要求你先输入先前设置的用户密码。在 Linux 系统中,有了管理员权限基本上就可以对系统做任何事情,包括一些危险的操作,因此使用 `sudo` 执行命令时请务必谨慎小心。
如果你的运气特别好(运气也是计算机水平的一部分),那么你将会在控制台中看到如下内容:
```
开始配置环境...
更新源列表...(1/3)
源列表已更新。
开始安装必要的软件包...(2/3)
软件包安装完成。
开始克隆仓库...(3/3)
仓库克隆完成。
环境配置完成,正在打开仓库...
```
这说明你已经成功安装了必要的编译环境,并且将实验仓库下载到了本地。尝试在控制台输入 `g++ --version`,你应该会看到类似如下的输出:
```
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
这说明 `g++` (C++程序的编译器)运作正常。
## 安装必要插件
首先在 VSCode 中打开实验仓库:
```sh
code ~/medical-os-labs
```
然后点击扩展搜索 "@recommended",点击如下按钮安装所有必要的 VSCode 插件:
## 测试
现在一切准备就绪,让我们运行一个简单的C++项目,测试一下环境是否正常工作。
实例项目位于 `example` 目录中,我们可以在VSCode的资源管理器中看到它:
该目录中包含如下文件:
```
example/
├── src
│ └── main.cpp
└── xmake.lua
1 directory, 2 files
```
其中 `main.cpp` 即为 C++源代码文件,你可以尝试在里面编写一些代码,回忆一下 C++的相关知识。默认程序(当然是)输出 `hello world!`:
```cpp
#include
int main(int argc, char **argv) {
std::cout << "hello world!" << std::endl;
return 0;
}
```
当你编写完毕想要运行程序时,请在控制台输入(确保你的控制台当前所在路径为 `~/medical-os-labs`):
```sh
xmake && xmake run example
```
程序将会编译并运行,在控制台输出:
```
hello world!
```
至此,你已经成功完成了实验环境的配置,恭喜你(鼓掌鼓掌)。
## Linux 简简简单版入门
1. 使用 Linux 最重要的是学会通过控制台来执行命令,请参见:[新手指南: Linux 新手应该知道的 26 个命令](https://linux.cn/article-6160-1.html)自行学习;
2. 话虽这么说,本次实验其实不太需要大家自己去输入太多命令,因为大多数操作我们已经为大家写好了脚本,只需要运行脚本即可,但是了解一些基本的命令还是有必要的;
3. 此外,大多数操作我们需要通过VSCode提供的图形界面来执行,所以**熟悉VSCode的使用方法是重中之重**;