2017-2018-1 20155321 《信息安全系统设计基础》第十一周学习总结
教材学习内容总结
-
本周主要学习了与虚拟存储器相关的知识点
-
虚拟存储器
- 是一个容量巨大的存储器的逻辑模型,实际上并不存在的物理存储器。虚拟存储器通过磁盘等存储器来扩大内存,令其被更大或更多的程序所使用
- 主存-外存层次
- 以透明的方式令用户有一个错觉,实际上提供了一个比内存空间大很多的程序地址空间
-
虚拟存储器的工作过程(由硬件和操作系统自动实现存储信息调度和管理的)
- 中央处理器访问主存的逻辑地址分解成组号a和组内地址b,并把逻辑组号a作为索引,查找地址变换表,以确定该组信息是否存放在内存里
- 若存在则执行第四步;若不存在,则检查内存中是否有空闲区,若没有,便调出某个暂时不用的组至辅存,并将这组信息调入内存
- 从辅存读出所需的组并送到空闲区并将那个空闲的物理组号a和逻辑组号a重新记录在地址变换表里
- 从地址变换表取出与逻辑组号a对应的物理组号a
- 从物理组号a和组内字节地址b计算出物理地址
- 根据物理地址从内存中存取必要的信息
-
实地址:也叫物理地址,指的是计算机物理内存实际的访问地址
-
虚地址:也叫逻辑地址,指的是用户在程序中使用的地址。
-
三种调度方式
- 页式调度
- 虚地址空间、内存空间均被分成等长的页,通过页表可以把逻辑地址转换成物理地址
- 每个进程对应一个页表。页表中对应每一个虚存页面均有一个表项
- 段式调度
- 按照程序的自然分界划分,虚地址由段号和段内地址组成。虚地址到实主存地址的变换通过段表实现。每个程序设置一个段表,段表的每一个表项对应一个段。每个表项至少包含有效位、段起址、段长
- 按照程序的自然分界划分,虚地址由段号和段内地址组成。虚地址到实主存地址的变换通过段表实现。每个程序设置一个段表,段表的每一个表项对应一个段。每个表项至少包含有效位、段起址、段长
- 段页式调度
- 段式与页式的结合。实存被等分成页。每个程序则先按逻辑结构分段,每段再按照实存的页大小分页,程序按页进行调入和调出操作,但可按段进行编程、保护和共享。
- 段式与页式的结合。实存被等分成页。每个程序则先按逻辑结构分段,每段再按照实存的页大小分页,程序按页进行调入和调出操作,但可按段进行编程、保护和共享。
- 页式调度
-
替换算法
- 随机算法:用软件或硬件随机数产生器确定替换的页面
- 先进先出:先调入内存的页面先替换
- 近期最少使用算法:替换最长时间不用的页面
- 最优算法:替换最长时间以后才使用的页面。这是理想化的算法,实际上却无法实现,因此只能把其作为衡量其他各种算法优劣的标准
教材学习中的问题和解决过程
- 按照书本内容实现简单的分配器(P597-P603)
- mmlib.c提供了一个内存系统模型
- mem_init()函数将对于堆来说可用的虚拟内存模型化为一个大的、双字对齐的字节数组,其初始化分配器。
- mm_free()函数:释放堆的内存
- mm_malloc()函数:分配size字节大小的块
- extend_heap()函数:拓展堆的可用空间
- coalesce()函数:合并bp指针指向的块的前后块
- find_fit()函数:找第一个空间大于size的空闲块
- place()函数:分割find_fit返回的块,创建块结构
- mmlib.c提供了一个内存系统模型
- 运行结果:
代码托管
上周考试错题总结
-
下面说法正确的是()
A.Linux内核使用的file table 所有的进程共享的。
B.不同进程打开同一个文件的文件描述符必须一样。
C.使用dup2 把标准输入重定向到描述符7 dup2(7,0)
D.使用dup2 把标准输入重定向到描述符7 dup2(0,7)
E. ls > foo.txt 是输出重定向
F.类型为FILE的流是对文件描述符和流缓冲区的抽象。
-
正确答案:ACEF
-
理解情况:错选了ADEF,主要是对dup2()函数的用法不太熟悉,因为要重定向到描述符7,所以应该把7这个参数卸载前面。
-
Unix/Linux中,对于代码fd=open("foo",O_WRONLY,0766),umask=022,下面说法正确的是()
A.进程对foo是只写的
B.同组成员能写foo
C.使用者可以执行foo
D.任何人都可以写foo
-
正确答案:AC
-
理解情况:错选了ABCD,因为实际上的权限应该是mode&umask,因此766&022=744,而111表示读:写:执行,因此对于使用者而言可以读、写和执行,对于同组成员和其他人而言只可以读,因此BD是错误的。
-
关于open(2),下面说法正确的是( )
A.flag 参数中O_RDONLY,O_WRONLY,O_RDWR至少要有一个
B.O_RDONLY|O_WRONLY == O_RDWR
C.fd=open("foo.txt",O_WRONLY|O_APPEND,0),调用write(fd,buff,n)写入foo.txt的数据不会破坏已有数据
D.fd=open("foo.txt",O_WRONLY|O_APPEND,0644),必将导致其他人不能写foo.txt
-
正确答案:AC??
-
理解情况:我选了ACD,此题暂时有疑问
-
Linux中下列概念中可以用Unix I/O处理的是()
A.普通文件
B.设备文件
C.目录
D.套接字
-
正确答案:ABCD
-
理解情况:漏选了B选项,在书本P623上写道“其他文件类型包含命名通道、符号链接、字符和块设备,因此B选项也是正确的
-
相对内核而言,文件分为文本文件和二进制文件。其中文本文件只含有ASCII或Unicode字符。
A.正确
B.错误
C.不确定
-
正确答案:B
-
理解情况:漏选了A选项,相对内核而言,文件不仅仅只是分为文本文件和二进制文件,因此是错误的。
本周结对学习情况
- 20155330
- 结对学习内容
- 书本第九章的内容
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 20篇 | 400小时 | |
第十一周 | 1352 | 1/15 | 15/165 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:12小时
-
实际学习时间:15小时
-
改进情况:改善自学看书的方法,提高看书学习效率
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)