题目
实验7题目:
具体数据在源码部分,见下文。
本文配合极客时间《操作系统实战45讲》,因而学习《汇编第四版》使用Win2k系统。
参考前一篇 汇编:8086CPU寻址模式、Debug程序用法。
补丁链接 提取码:5640
本系列文章是《操作系统实战45讲》课程学习过程中的心得体会与问题汇总。
系列文章放入「操作系统实战」分类里。如果对你有帮助,欢迎关注我。
如果你也想一起写一个属于自己的操作系统,直接翻到文末查看。
话不多说,现在进入正题。本文分为两个部分:一、实验环境搭建。二、前4节课遇到的问题与解答。
1、一台电脑。电脑上装有Windows或MacOS系统。我用的是MacOS系统。
2、虚拟机。我选择的是VMware Fusion 12(若是Windows,装个最新版VMware即可)。
3、Ubuntu/CentOS系统。我选择的是Ubuntu,作为虚拟机系统,用来实现自己的操作系统。
安装好虚拟机软件VMware,基本都是点下一步,下一步,直到安装完成。
从 这里[1] 下载Ubuntu 20.04系统安装文件,是一个iso文件。
在VMware里创建一个新的虚拟机,用来安装Ubuntu 20.04系统:
选择新建,后面的步骤比较简单,跟着提示做就可以了。
SSH 通常有密码登录和密钥登录两种方式。密钥登录时使用的是 SSH 的密钥,由 ssh-agent 来处理。这里介绍使用 GnuPG 生成的 PGP 密钥来登录 SSH。此时使用 gpg-agent 来处理登录过程。
使用 GPG 密钥登录的好处是便于管理服务器。只要把 GPG 密钥的公钥放到服务器上面,用同一个密钥可以登录所有这些服务器。还有,GnuPG 可以使用智能卡来保存密钥,使 SSH 密钥更加安全。
注意:
这篇文章使用 Ubuntu 18.04,并使用 GnuPG v2.2.X 来演示,小于 v2.2.X 的版本下文某些命令可能是无效的。运行如下命令查看版本:
1 | gpg --version |
快速生成 GnuPG 密钥的方法详见 这里
分步生成 GnuPG 密钥的方法详见:
生成属于自己的一对密钥后,再向这个密钥中添加一个认证密钥[A]。
1)从 NVIDIA 官网下载对应显卡的驱动备用
https://www.nvidia.cn/Download/index.aspx?lang=cn
我下载的驱动是:NVIDIA-Linux-x86_64-410.93.run
安装环境:华硕笔记本 Ubuntu 18.04
注意:
主板 BIOS 必须关闭安全启动 (Secure Boot),不然安装的 NVIDIA 驱动无法加载。
但此时,还是能正常进 Ubuntu 桌面,可能是此时使用的是 Intel 核显有关。
2)首次运行 NVIDIA 驱动
1 | chmod +x NVIDIA-Linux-x86_64-410.93.run |
首次运行驱动程序,不会安装,因为系统中有 nouveau 驱动存在。
但是 NVIDIA-Linux-x86_64-410.93.run 会生成 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
文件。用于禁用系统自带的 nouveau 驱动。该文件内容如下:
1 | $ cat /etc/modprobe.d/nvidia-installer-disable-nouveau.conf |
3)使禁用生效
只有 blacklist 并不能真的禁用 nouveau 驱动。执行如下命令更新 initramfs:
1 | sudo update-initramfs -u |
然后,重启系统,禁用就成功了。执行如下命令验证:
1 | # 输出结果为空说明已经禁用 nouveau 驱动 |
你的公钥的作用:别人用来给你发加密的信息(公钥加密)&别人验证你的签名(公钥解密),即加密&验证(别人来做)
你的私钥的作用:你用来创建签名(私钥加密)&解密别人发给你的信息的(私钥解密),即解密&签名(你来做)
具体而言,Alice要想发送加密信息到Bob,则:
Alice有Alice的签名私钥和Bob的加密公匙
Bob有Alice的签名公匙和Bob的解密私钥
1 | gpg (GnuPG) 2.1.11 |
Linux 中每个进程维护了一个文件描述符表,如 shell 终端,默认有三个文件已打开,他们的文件描述符和文件对应关系为:
1 | fd 0: /dev/stdin -> /proc/self/fd/0(前者是指向后者的软链接,下同) |
所以在该 shell 中创建新的的文件的描述符就从3开始。
用于输入输出重定向使用的文件描述符大于9,所以安全可用的自定义文件描述符范围就是:3-9
因为 Bash 文档 里有这样一句话:
Redirections using file descriptors greater than 9 should be used with care, as they may conflict with file descriptors the shell uses internally.
1)输入输出重定向
2)复制输入输出文件描述符
3)移动输入输出文件描述符
4)关闭文件描述符和同时读写文件
5)将已重定向的输入/输出恢复到标准输入/标准输出