分类:Tech

共 22 篇文章

操作系统课设笔记

因为实习,没法一次性把课设做完,就干脆些把笔记写成博文方便自己查阅吧,持续更新,直至完成。

这课设的设计基本上是依赖于一本书的,大概是怕我们遇到太多的坑吧。。而OS上的坑又不是那么容易解决的,总之以下操作不带有普遍性。

课设平台:

  • fedora 7
  • linux-2.6.21 source code
  • i386

实验1 编译内核

纯粹照着书搞。。

实验过程

以下操作假设用户为root,目录自行决定。

% tar -zxvf linux-2.6.21.tar.gz
% cd linux-2.6.21
% make mrproper  # 清楚掉之前编译产生的垃圾
% make oldconfig  # 如果自己有配置文件的话,直接 copy 进来命名为 .config 即可
% vim Makefile

修改EXTARVERSION ...

阅读全文

如何验证一个数字证书的有效性

首先,设要验证的这个数字证书为B,则它必然由某个CA发放。这里假设该CA的数字证书是存在你的电脑上的或从B到根CA的数字证书都存放在你的电脑上(对于层次结构CA)。出于简单考虑,这里取单层CA做分析,即根CA的数字证书在你的电脑上,设为A,待验证的证书B是由其发放的。

好了,假设完毕。首先看看这个待验证的证书包含哪些消息吧。

对于一个RA(Registration Authority)的请求,CA会产生一对公私钥,公钥会被放在对应产生的数字证书中,私钥交给RA自己保管(怎么交的暂不考虑)。所以数字证书里必须包含的就是这个公钥。除此之外,还得有一系列的比如CA的名字,RA的信息等等。总之,这些信息会被包含成一个数字证书。

既然数字证书产生了,但它终究是个有格式的文件,我们下步需要做的就是,保证它没有被篡改!所以,就需要颁发者对证书进行签名了,也就是对生成的数字证书进行摘要后,再用颁发者的私钥对其签名,然后将签名后的内容连同证书一起打包,这样才得到了一个可验证的完整的数字证书。

用密码学表示一下大概就是:

// 设生成的中间数字证书为 MB,最终发放的为B
则B = MB || E(HASH(MB))  // 这里E是用CA的私钥加密, || 表示拼接

接下来,看看是如何验证的 ...

阅读全文

动态载入和虚拟内存的按需调页的关联

《操作系统概念》(第七版)第九章虚拟内存那章有如下这样一句话:

动态载入能够帮助减轻这一限制(将整个进程放入内存才能执行的限制),但是它需要程序员特别小心并且需要一些额外的工作。

那么,额外工作指的是? 在网上基本上已经搜不到书上所说的动态载入了,基本上都是.dll或者.so之类的。 以下为个人理解,理解基于动态载入不需要操作系统提供特别支持这一事实。

动态载入是以子程序为单元的,也就将一个程序写成了许多的子程序。在使用到了某个子程序时,程序员需要在程序中编码以检查该子程序是否已在内存中,不在内存中时,需要编码将其动态载入,这里的程序员的编码就是所谓的额外开销。比如下面这段代码(我不确定是否正确):

// so_obj是一个变量标识是否导入了某个.so
if (so_obj == NULL) {
    // load it here
}

而虚拟内存是以页为单元的,一个程序被分放到了一些页上。而按需调页做到的是,当你在访问某一行代码,该代码在某一个不在内存中的页上时,操作系统会trap然后调页,从而将该代码所在页调入内存,从而看起来像是在“动态载入”了代码,但程序员没做任何事~

Update at 2014-05-26

因为动态加载和动态链接在操作系统的实现上已经模糊了 ...

阅读全文