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

教材学习内容总结

理解虚拟存储器的概念和作用

  • 虚拟存储器(Virtual Memory),是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完善交互,它为每个进程提供一个大的,一致的,私有地址空间。通过一个清晰的机制,虚拟存储器提供了三个要重的能力:
  • 作用
    (1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的利用了主存;

(2)它为每个进程提供了一致的地址空间,从而简化了存储器管理;

(3)它保护每个进程的地址空间不被其他进程破坏。

理解地址翻译的概念

地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射。

理解存储器映射

  • 定义:
    Linux通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容的过程叫做存储器映射。
  • 使用mmap函数的用户级存储器映射
    1.创建新的虚拟存储器区域
 #include <unistd.h>
   #include <sys/mman.h>
   void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
                                  成功返回指向映射区域的指针,若出错则为-1

参数含义:

  • start:这个区域从start开始
  • fd:文件描述符
  • length:连续的对象片大小
  • offset:距文件开始处的偏移量
  • prot:访问权限位,具体如下:
  • PROT_EXEC:由可以被CPU执行的指令组成
  • PROT_READ:可读
  • PROT_WRITE:可写
  • PROT_NONE:不能被访问
  • flag:由描述被映射对象类型的位组成,具体如下:
  • MAP_ANON:匿名对象,虚拟页面是二进制0
  • MAP_PRIVATE:私有的、写时拷贝的对象
  • MAP_SHARED:共享对象

掌握动态存储器分配的方法

-.堆:动态存储器分配维护着一个进程的虚拟存储器区域,称为堆。
假设它是一个请求二进制0的区域,紧接在未初始化的bss区域后开始,并向上(更高的地址)生长。有一个变量brk指向堆的顶部

  • 分配器的两种基本风格:
    a.显示分配器-malloc和free
    b.隐式分配器/垃圾收集器
  • malloc和free函数:
    .系统调用malloc函数,从堆中分配块:
.#include <stdlib.h>
void *malloc(size_t size);
                    // 返回:成功则为指针,指向大小至少为size字节的存储器块,失败则为NULL
//系统调用free函数来释放已分配的堆块:
#include <stdlib.h>
void free(void *ptr);
                     // 无返回值
//ptr参数必须指向一个从malloc、calloc或者reallov获得的已分配块的起始位置。

###理解垃圾收集的概念

- 垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块被称为垃圾,自动回收堆存储的过程叫做垃圾收集。
- 垃圾收集器将存储器视作一张有向可达图,只有当存在一条从任意根节点出发并到达p的有向路径时,才说节点p是可达的,而不可达点就是垃圾。
###了解C语言中与存储器有关的错误
1.间接引用坏指针
常见错误——scanf错误
2.读未初始化的存储器
常见错误——假设堆存储器被初始化为0
3.允许栈缓冲区溢出
常见错误——缓冲区溢出错误
4.假设指针和它们指向的对象是相同大小的
在远处起作用action at distance
5.造成错位错误
6.引用指针,而不是它所指向的对象
7.误解指针运算
8.引用不存在的变量
9.引用空堆块中的数据
10.引起存储器泄露





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

## 上周考试错题总结
- 有关Socket端口和Linux命令,下面说法正确的是()
A	.	
可以用 echo /etc/services查看
B	.	
使用 netstat -pan|grep 80可以查看哪些进程占用了80端口
C	.	
可以使用lsof -i:80查看哪里些进程占用了80端口
D	.	
可以用sudo /etc/init.d/service start|stop|restart 启动|停止|重启系统服务
E	.	
可以用netstat -pa 查看所有的服务端口(LISTEN,ESTABLISHED)
F	.	
ps -aux | grep pid 可以查看绑定某端口的进程号为pid的进程的详细情况
正确答案: A B C D E F  
- 有关Web服务器的说法,正确的是()
A	.	
Web服务器可以提供静态和动态内容
B	.	
Web服务器返回的静态内容由URL标识
C	.	
/.../app?150&21传递的内容由app可执行文件产生,150和21是调用参数
D	.	
最小的URL后缀“/”,会被扩展成类似“/index.html”的默认主页
正确答案: A B C D  

- 有关套接字接口函数open_clientfd()、open_listenfd(),下面说法正确的是()
A	.	
这两个函数中open_clientfd()只可以用于客户端编程 
B	.	
这两个函数中open_clientfd()可以用于客户端和服务器端编程
C	.	
这两个函数中open_listenfd()只可以用于服务器端编程
D	.	
open_clientfd()中的port参数是客户端的端口
E	.	
open_clientfd()中的port参数是服务器端的端口
F	.	
open_clientfd()返回的clientfd可以有Unix I/O接口读写
G	.	
open_listenfd()返回的listenfd可以有Unix I/O接口读写
正确答案: A C E F  
## 结对及互评

### 点评模板:
- 博客中值得学习的或问题:
    - xxx
    - xxx
    - ...
- 代码中值得学习的或问题:
    - xxx
    - xxx
    - ...
- 其他

### 本周结对学习情况 
    - [结对同学学号1](博客链接)
    - 结对照片
    - 结对学习内容
        - XXXX
        - XXXX
        - ...

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

xxx
xxx

## 学习进度条

|            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| --------   | :----------------:|:----------------:|:---------------:  |:-----:|
| 目标        | 5000行            |   30篇           | 400小时            |       |
| 第一周      | 200/200           |   2/2            | 20/20             |       |
| 第二周      | 300/500           |   2/4            | 18/38             |       |
| 第三周      | 500/1000          |   3/7            | 22/60             |       |
| 第四周      | 300/1300          |   2/9            | 30/90             |       |


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

参考:[软件工程软件的估计为什么这么难](http://www.cnblogs.com/xinz/archive/2011/04/05/2005978.html),[软件工程 估计方法](http://www.cnblogs.com/xinz/archive/2011/04/06/2007294.html)

- 计划学习时间:XX小时

- 实际学习时间:XX小时

- 改进情况:

(有空多看看[现代软件工程 课件 
软件工程师能力自我评价表](http://www.cnblogs.com/xinz/p/3852177.html))
## 参考资料
-  [《深入理解计算机系统V3》学习指导]([http://www.cnblogs.com/rocedu/p/5826467.html])
-  ...
 posted on 2017-12-03 23:21  20155327李百乾-  阅读(199)  评论(0编辑  收藏  举报