Skip to content

Commit

Permalink
20190717上午
Browse files Browse the repository at this point in the history
  • Loading branch information
0xcaffebabe committed Jul 17, 2019
1 parent aa5931c commit f836be0
Show file tree
Hide file tree
Showing 4 changed files with 185 additions and 2 deletions.
4 changes: 4 additions & 0 deletions 计算机系统/nav.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@
- [链接](./在系统上运行程序/链接.md)
- [异常控制流](./在系统上运行程序/异常控制流.md)
- [虚拟内存](./在系统上运行程序/虚拟内存.md)

## 程序间的交互和通信

- [系统级IO](./程序间的交互和通信/系统级IO.md)
126 changes: 124 additions & 2 deletions 计算机系统/在系统上运行程序/虚拟内存.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,134 @@ _与存储器的层次结构_

## 多级页表


![](https://img2018.cnblogs.com/blog/1521884/201811/1521884-20181110125535159-1010566207.png)

# 内存映射

- 共享对象
> 将虚拟内存区域与一个磁盘对象关联起来,以初始化这个虚拟内存区域的内容
- 普通文件
- 匿名文件

## 共享对象

![](https://upload-images.jianshu.io/upload_images/8195112-fd3d19715bbc6dd8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/570/format/webp)

- 写时复制

![](https://upload-images.jianshu.io/upload_images/8195112-8184c849b32b8b4b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/722/format/webp)

## 用户级内存映射

```c
void *mmap(void *start,size_t length,int prot,
int flags,int fd,off_t offset)
```
# 动态内存分配
- 显式分配
程序员手动释放内存
- 隐式分配
垃圾收集器回收
## malloc与free函数
```c
void *malloc(size_t size);
void free(void *p);
```

## 使用动态内存分配的原因

- 程序运行的未知性

## 分配器的要求和目标

- 处理任意请求序列
- 立即响应请求
- 只使用堆
- 对齐块
- 不修改已分配的块

### 目标

- 最大化吞吐率
- 最大化内存利用率

## 碎片

- 内部碎片
- 外部碎片

## 实现问题

- 如何记录空闲块
- 如何选择一个合适的空闲块放置一个新分配的块
- 如何处理空闲块被分配后剩余的部分
- 如何处理一个被释放的块

## 隐式空闲链表

![](http://images.cnitblog.com/blog/273314/201312/03215653-7d7dc5d9892d4e20965bf94921f28a96.png)

![](http://images.cnitblog.com/blog/273314/201312/03215926-c7c3c3a7ae6648edba89ae08047cceb5.png)

## 放置已分配的块

- 首次适配
- 下次适配
- 最佳适配

## 分割空闲块

> 将空闲块分为两部分,一部分变成分配块,另一部分变成空闲块
## 获取额外的堆内存

## 合并空闲块

_假碎片_

- 块合并

## 带边界标记的合并

![](http://images.cnitblog.com/blog/273314/201312/03222821-394c7311449c4af6b354b586455928a9.png)

## 显式空闲链表

![](https://img-blog.csdnimg.cn/20190115203630741.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA3NzIyODk=,size_16,color_FFFFFF,t_70)

## 分离的空闲链表

- 简单分离存储
- 分离适配
- 伙伴系统

# 垃圾收集

## 基本知识

![](https://img-blog.csdnimg.cn/20190115203735265.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA3NzIyODk=,size_16,color_FFFFFF,t_70)

## 标记-清扫垃圾收集器

![](https://img-blog.csdnimg.cn/20190115203819524.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA3NzIyODk=,size_16,color_FFFFFF,t_70)


# C程序常见的与内存有关的错误

- 间接引用坏指针
- 读未初始化的内存
- 栈缓冲区溢出
- 假设指针与指针所指向的对象大小相同
- 错位错误
- 引用了指针,而不是指针所指的对象
- 误解指针运算
- 引用不存在的变量
- 引用空闲堆块中的数据
- 内存泄漏
6 changes: 6 additions & 0 deletions 计算机系统/程序间的交互和通信/系统级IO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# UNIX IO

- 打开文件
- 改变当前文件位置
- 读写文件
- 关闭文件
51 changes: 51 additions & 0 deletions 软件工程/结构化分析方法.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,55 @@
- 自顶向下,逐层分解

- 建立数据字典

- 给出加工小说明

# 需求规格说明书

- 引言
- 概述

- 功能概述
- 约束

- 数据流图、数据字典、加工说明

- 接口

- 用户接口
- 硬件接口
- 软件接口

- 性能需求

- 属性

- 其他需求

# 需求验证

## 有关SRS内容

- 正确性
- 无二义性
- 完整性
- 可验证性
- 一致性
- 可理解性

## 有关SRS风格

- 可修改性
- 可被跟踪性
- 可跟踪性
- 设计无关性
- 注释

# 结构化设计

- 总体设计
- 详细设计

## 设计

> 一种软件开发活动,定义实现需求规约所需的软件结构

0 comments on commit f836be0

Please sign in to comment.