通过上周的初次尝试复习,像是站在一个更高的位置,旁观这些知识的作用,以及为什么要出现这些知识,不足之处是欠缺实践,理解不透彻。

总结的内容对大家可能帮助不大,因为整理复习总结是当事人受益最多。

开始本周的复习!!

虚拟内存相关概念有哪些?

虚拟内存:每个进程中各自独立的地址空间。

页面换出:长期闲置代码或数据从内存缓存到磁盘上的交换分区或换页文件。

页面换入:从交换分区或换页文件中恢复到半导体内存中。

内存映射表动态维护:虚拟内存到物理内存,或者说地址空间到内存空间的映射关系。

每换一页是4*1024字节,而不是1字节。

内存分配:在地址空间中划出一定大小的范围,加以标记,表示占用;在物理内存中找到相应大小的空间,建立映射,记录映射表。

内存释放:解除映射关系,占用范围标记为不占用。

内核空间与用户空间?

在每个进程“独立”的虚拟内存中,一部分高地址的虚拟内存成为内核空间,为系统中所有进程共享,存放系统内核的代码和数据。其余低地址虚拟内存为用户空间,存放该进程自己的代码和数据。

用户空间和内核空间的代码不能直接访问,要借助系统调用(封装好的具有些特定功能的函数)进入内核态。

内核态高度警惕,安全等级高;用户态反之。

内存壁垒?

每个进程的用户空间都有一张专属的内存映射表。但所以进程的内核空间维护的是同一张内存映射表init_mm.pgd。

虚拟内存如何分配与释放?

只有虚拟内存的堆内存区通过编程方法完成内存的分配与释放。其他代码区,数据区,BSS区,栈区,都是系统干的事,也是不允许操作的。

概念:堆尾指针:堆内存的最后一个字节的下一个字节的地址。

注意:分配内存的时候是低地址到高地址,释放内存是从高地址开始释放。

可以分配虚拟内存的函数?

1)sbrk函数:【以相对方式分配和释放虚拟内存】

函数原型:#include <unistd.h>  void* sbrk(intptr_t increment);

成功返回该函数之前的堆尾指针,失败返回-1。

参数:堆内存增加字节数。其值>0为分配虚拟内存。<0为释放虚拟内存。=0为获取当前堆尾。

2)brk函数:【以绝对方式分配和释放虚拟内存】

函数原型:#include <unistd.h>  int brk(void* end_data_segment);

成功返回0,失败返回-1。

参数:新堆尾指针。其值>当前堆尾指针为分配虚拟内存。<当前堆尾指针为释放虚拟内存。=当前堆尾指针为啥也没做。

总结:sbrk分配虚拟内存简便,释放麻烦。brk反之,这俩搭配着用最好了。

用来建立地址映射的内存操作函数?

1)mmap函数:【建立虚拟内存到物理内存或磁盘文件的映射】

函数原型:#include <sys/mman.h> void* mmap(void* start,size_t length,int port,int flags,int fd,off_t offset);

成功返回映射区(虚拟)内存起始地址,失败返回MAP_FAILED(-1)。

参数:start:映射区(虚拟)内存起始地址,NULL值为系统自动选定后返回

参数:length:映射区字节数。

参数:port:访问权限。PROT_READ读/PROT_WRITE写/PROT_EXEC

参数:flags:映射标志。虚拟内存到物理内存映射,虚拟内存到磁盘文件映射

参数:fd和offset只用于虚拟内存到磁盘文件映射

2)munmap函数:【解除虚拟内存到物理内存或磁盘文件的映射】

函数原型:#include <sys/mman.h> int munmap(void* start,size_t length);

成功返回0 ,失败-1.

参数:start:映射区(虚拟)内存起始地址

参数:length:映射区字节数。

系统调用的执行过程?

系统调用目的:涉及到系统级别资源的操作(例如文件管理、进程控制、内存管理)的时候,就要从用户态进入内核态进行操作。

一个系统调用分为两部分,一部分在用户态执行,定义在系统调用库中的C函数,另一部分在内核态执行,提供实际功能的系统调用函数。二者之间通过80H中断相互联系。

用户时间和系统时间?

进程在这两个状态下执行的时间,称为用户时间和系统时间。

分配内存(内核态)

存入数据(用户态)

打开文件(内核态)

计算数据(用户态)

睡眠(挂起态)

将结果写入文件(内核态)

释放内存(内核态)

关闭文件(内核态)

使用命令“time 可执行程序”看执行的不同时间。

文件系统的结构?

1)硬盘结构:若干个分区(逻辑卷)。

2)分区结构:引导块(引导系统启动的代码)、超级块(分区描述信息)、若干个柱面组(存储数据)。

3)柱面组结构:超级块副本、柱面组信息、i节点映射表(文件号和i节点的映射表)、块位图(区分空闲块)、i节点表(若干个i节点)、数据块集(若干个数据块,用于存储数据)

4)i节点表:若干个i节点。

5)i节点结构:元数据(文件权限,类型等)、数据块索引表。【i节点大小固定】

6)数据块索引表结构:若干个数据块索引号(通过索引号找到数据块,其中包含直接块和间接块,最终这些块拼接成文件)。

文件类型有哪些?

1)普通文件(由-表示),也称为流式文件。

2)目录文件(d表示):它仅存储文件名和i节点号的映射。这种映射称为目录条目,也叫硬链接。(两个文件i节点号一致)

3)符号链接(软链接)文件(由l表示):独立的i节点和一个被链接文件路径的字符串。(两个文件i节点号不一致)

4)(有名)管道文件(由p表示):只有i节点和目录中的硬链接条目,i节点中只有元数据没有数据库索引表。实质是一个内核中的对象,可用于在不同进程之间交换数据。

操作文件的函数有哪些?

1)文件打开:open。成功返回文件描述符。

2)文件关闭:close。成功返回0 ,参数传递文件描述符。

什么是文件描述符?

1)进程表结构:进程表项、文件描述符表。

2)文件描述符表结构:文件描述符、文件表项指针。

3)文件表项结构:状态标志、读写位置、V节点指针。

4)V节点结构:包括i节点和其他信息。

5)i节点结构:元数据(文件权限,类型等)、数据块索引表。【就是在上边讲的可以存储数据的文件结构】

Unix学习记录(二)相关推荐

  1. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  2. Android动画学习记录二(属性动画、估值器和插值器)

    Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) 一.补间动画缺陷 二.属性 ...

  3. HTML学习记录二:html标签(五):超链接标签

    HTML学习记录二:html标签(五):超链接标签 一.超链接标签写法 二.超链接标签的属性 三.超链接的锚点用法 四.链接分类 一.超链接标签写法 在 HTML 标签中, 标签用于定义超链接,作用是 ...

  4. 大数据之spark学习记录二: Spark的安装与上手

    大数据之spark学习记录二: Spark的安装与上手 文章目录 大数据之spark学习记录二: Spark的安装与上手 Spark安装 本地模式 Standalone 模式 基本配置 步骤1: 复制 ...

  5. [大数据技术与应用省赛学习记录二]——模块一(HADOOP完全分布式集群搭建)

    **在操作前,先梳理一下HADOOP完全分布式需要做些什么,不然像无头的苍蝇一样,永远不知道做什么.因为我本人比赛是一台服务器Centos 7,与三台客户端Ubuntu 18.04,所以以物理机的角度 ...

  6. Openzeppelin学习记录二:utils模块(SafeMath.sol+SafeCast.sol)

    Openzeppelin学习记录一:access模块(AccessControl.sol+Ownable.sol) Openzeppelin学习记录 2.Utils 2.1 Math 2.2 Safe ...

  7. UE4 学习记录二 给角色添加骨架,皮肤,及运动动画

    这只是用来记录我学习UE4过程的,可能帮不到你,先说声抱歉.为了防止误导他人,请勿转载,请勿转载,请勿转载. 本文的主题是给角色添加骨架.皮肤.运动动动画.总章目录(https://blog.csdn ...

  8. Linux学习记录二——文件导航

    文件导航 前言 一.理解文件系统树 二.导航命令 1.pwd(显示当前工作目录) 2.ls(列出目录内容) 3.cd(更改当前工作目录) 三.路径名 绝对路径名 相对路径名 四.有关文件名的一些重要说 ...

  9. Unix学习记录(一)

    在学习UNIX操作系统的过程中,对重点知识进行整理,对存在的疑问查找资料后解决并记录,便于日后的定期回顾复习. 从源代码到可执行程序的构建过程? 预编译/编译预处理(gcc -E hello.c -o ...

最新文章

  1. 通过Python在Windows或Linux上快速搭建HTTP服务器
  2. js将字符串中所有反斜杠\替换成正斜杠/
  3. 计算机实践报告800字,计算机软件专业大学生社会实践报告800字
  4. RocketMQ的Producer详解之顺序消息(原理)
  5. 50张非常精美的Apple主题桌面壁纸(上篇)
  6. python简单笔记
  7. 老司机整理对Nginx性能优化
  8. python把函数作为参数的函数
  9. Join a New Company
  10. 特别实用的几种SQL语句送给大家,让你的SQL高大上!
  11. 适配器模式之观察者模式
  12. 皮尔斯晶振电路的参数计算
  13. Python构造树结构应用到城市层级编码
  14. 静态网页的基本结构及标签
  15. js Array的push pop shift unshift 方法
  16. 2022-2028年中国建筑设计行业市场调查研究及发展前景展望报告
  17. oracle用plsql导出dmp文件
  18. Android 10 原生支持 5G!
  19. 数据库实验4---数据完整性
  20. 你以为大厂的代码就不烂了?烂成一坨屎...

热门文章

  1. PDF如何转换成TXT文本
  2. 《航空系统》项目研发总结
  3. MT4白标升级MT5 用户信息
  4. Java实现Excel表格数据的导入(兼容xls与xlsx)
  5. keil5识别不了记事本改的.c文件解决办法
  6. 关于时间time和datetime
  7. 【图像处理通道分离去除印章】
  8. 一直以来伴随我的一些学习习惯(四)——程序员的知识结构
  9. UnityShader Reversed-Z的理解
  10. EAS F7控件弹出表格隐藏某列