博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2017-2018-1 20155217 《信息安全系统设计基础》第九周学习总结

实现mypwd

  • pwd是print working directory的缩写,即打印当前路径的意思。打开终端,一定会在执行命令的$号之前看见当前的工作目录,不过一定会出现~在前面或是/etc在后面。此时输入pwd命令就是可以将工作目录完全展开。

伪代码:

  • 通过命令man pwd来查看pwd命令的基本用法以及相关信息:

  • 然后输入 man -k directory | grep 2 得知一道getcwd()调用函数,而这道函数一定是和pwd命令相关的。

  • 这是函数getcwd()的原型。

  • 所以这个pwd伪代码描述为:

一个字符串数组储存绝对路径
调用函数getcwd()
if (返回的指针==NULL)
    调用函数出错,发出错误报告
else
    打印结果

代码实现:

#include <stdio.h>
#include <unistd.h>
int main(void)
{
    char buff[256];
    getcwd(buff,sizeof(buff));
    printf("当前路径为:%s\n",buff);
    return 0;
}

测试代码:

  • 运行结果如下:

教材学习内容总结

第六章 存储器层次结构

存储器系统是一个具有不同容量、成本和访问时间的存储器设备的层次结构。

存储技术

  • 机访问存储器分为:静态的SRAM、动态的DRAM
  • SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值。
  • DRAM的特点:每一位的存储是对一个电容的充电;对干扰非常敏感。用途:数码照相机和摄像机的传感器
DRAM存储不稳定的应对机制:

(1)存储器系统必须周期性地通过读出,或者重写来刷新存储器的每一位;
(2)使用纠错码。
  • SRAM和DRAM的区别:
(1)只要有电,SRAM就会保持不变,而DRAM需要不断刷新;
(2)SRAM比DRAM快;
(3)SRAM对光和电噪声等干扰不敏感;
(4)SRAM比DRAM需要使用更多的晶体管,所以更昂贵。
  • 传统的DRAM:
行地址i:RAS 
列地址j:CAS DRAM组织成二位阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量。 
二维阵列组织的缺点是必须分两步发送地址,这增加了访问时间。
  • 存储器模块:
168个引脚的<双列直插存储器模块> ,以64位为块传送数据; 
72个引脚的<单列直插存储器模块>,以32位为块传送数据

局部性

  • 倾向于引用邻近与其他最近引用过的数据项的数据项,或者最近引用过的数据项本身,这种倾向性,被称为局部性原理。
  • 局部性包括时间局部性和空间局部性。
时间局部性:被引用过一次的存储器位置很可能在不远的将来再被多次引用。 
空间局部性:一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。

高速缓存存储器

存储器层次结构只有三层:CPU寄存器、DRAM主存储器和磁盘存储。

  • 通用的高速缓存存储器结构
每个存储器地址有m位,形成M=2^m个不同的地址。 
高速缓存组:S = 2^m个高速缓存组的数组 
高速缓存行:B = 2^m字节的数据块组成 
有效位:指明这个行是否包含有意义的信息
标记位:唯一地标识存储在这个高速缓存行中的块,t = m -(b+s)
高速缓存的大小(容量)C指的是所有块的大小的和。标记位和有效位不包括在内,C = SES。
  • 直接映射高速缓存:每个组只有一行的高速缓存。
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步:
(1)组选择(2)行匹配(3)字抽取
  • 组相联高速缓存
E路组相联高速缓存:1<E<C/B

教材学习中的问题和解决过程

  • 习题6.2:计算这样一个磁盘的容量。它有2个盘片,10 000个柱面,每条磁道平均有400个扇区,每个扇区平均有512个字节。
  • 解答:根据磁盘容量公式可得:磁盘容量 = 512(字节)400(扇区)10000(磁道数)2(表面)2(盘片面数)= 8 192 000 000 字节 = 8.192GB

代码调试中的问题和解决过程

根据代码驱动的程序设计学习建立的项目结构

  • 首先建立所需文件夹

  • 通过命令sudo apt install tree进行安装

  • 将本周代码存入week09文件夹后,输入tree即可

代码托管

上周考试错题总结

  • 关于代码 int main(){} 说法正确的是(ACE)

A . 返回值是0

B . 返回值不确定

C . 会调用exit(0)

D . 返回值大于0

E . 上面代码运行完,在命令行中运行echo $? 的值是0

  • 两个语句都是终止进程。
  • Unix/Linux中通过调用( A )可以获取子进程PID。

A . getpid()

B . getppid()

C . getcpid()

D . fork()

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 其他

本周结对学习情况

- [20155236](博客链接)
- 结对照片
- 结对学习内容
    - 组相连高速缓存
       与直接映射高速缓存中的组选择一样,组索引位标识组。
       组相连高速缓存中的行匹配和字选择:把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。
       组相连高速缓存中不命中时的行替换:最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用,等。

其他(感悟、思考等,可选)

本次学习过程总体来说较上一次轻松,因为概念性知识点并不晦涩,而代码部分也并不困难。同时,本章节各部分之间的联系性增强,只要好好阅读课本,课本上练习题都不是问题,基本上都有公式。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第九周 1472/1472 2/14 10/77

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料