Linux虚拟内存管理基础


逻辑地址
6
查表 转换
物理地址
CR3寄存器
虚拟页 0 物理页 3 null 1 null 物理页 2 null 1 null 物理页 null null 1 null 进程id 虚拟页 物理页 0 1 2 3
进程 1 的页表
1 2 3 虚拟页
内页表
taken N Y Y Y 进程id null os 2 1
9
线性地址 页
页表 页目录
CR3
2014/10/9
Intel 80x86 Linux 处理器的分页 OS Analysis
10/54
分页举例
假设进程需要读取0x20021406中的字节。 分页单元将该地址划分为3个部分:
0x20021406=0010 0000 0000 0010 0001 0100 0000 0110b
页目录索引 (0x80=128) 页表索引 (0x21) 页内偏移 (0x406) Xxx xxx Xx 缺页异常 xxxx xxx Xx xx

+
+
Present=0
CR3
p1的页目录
p1的页表
2014/10/9
Linux OS Analysis
11/54
关于虚拟内存的思考一
1. 如何将同一块物理内存同时映射到多个进程的地址空间中? (共享内存是一种高效的进程间通信机制) 2. 如何将同一块物理内存同时映射到同一个进程地址空间的多 个位置上? 。 3. 多个进程 同时装载同一个动态链接库时,该动态库在每个进 程地址空间中的装载位置相同吗? 4. 如何做到将Linux内核代码和数据映射到每个进程的地址空间, 并且随着进程切换只是改变用户地址空间的内容而内核地址 空间内容保持不变? 5. 已知工作在用户态的应用程序不能访问内核空间的内存,那 么如果一个应用程序申请了一块内存,如果将指向该内存的 指针p传递给了一个内核态程序(例如某中断服务程序),那 么内核态程序能通过指针p访问该内存吗?
17
mmap内存映射
1. void * mmap(void *start, size_t length, int prot , int flags, fd, off_t offset)

int
start:要映射到的虚拟内存区域的起始地址,通常都是用NULL, NULL表示由内核来指定该内存地址 • length:要映射的内存区域的大小 • prot:期望的内存保护标志,是以下的某个值,可以通过or运算符组合 到一起 1. PROT_EXEC 可执行;2. PROT_READ可读;3. PROT_WRITE可执 • flags:指定映射对象的类型,映射选项和映射页是否可以共享。 MAP_SHARED /MAP_PRIVATE/MAP_LOCKED/ MAP_ANONYMOUS • fd:文件描述符(由open函数返回) • offset:表示被映射对象(即文件)从那里开始对映,通常都是用0。 该值应该为大小应为PAGE_SIZE的整数倍 • 返回值:成功则返回被映射虚拟内存区的指针,失败返回-1。
逻辑地址与物理地址
1. 逻辑地址:程序在运行过程中用来访问存储器的地址。程序
员在编程时,只需知道逻辑地址,不需考虑该地址与实际物 理硬件上的存储单元如何对应。编译器在编译源程序时,也 只需考虑逻辑地址。 2. 物理地址:表示物理存储器中一个存储单元的实际位置,地 址总线上产生的就是物理地址。 3. 在实地址模式下,逻辑地址等于物理地址。在虚拟地址模式 下,逻辑地址不等于物理地址,必须经过查表才能转换为物 理地址,因此也叫虚拟地址。
15
IPC机制:共享内存
1. int shmdt(void *addr); • 功能:与shmat函数相反,是用来断开与共享内存附加点 的地址,禁止本进程访问此片共享内存 • addr:共享存储段的地址,以前调用shmat时的返回值 • 返回值:成功:0;出错:-1
16
mmap内存映射
1. 利用mmap函数可以将一个磁盘文件或者其它设备对象映射到 虚拟内存空间。文件被映射到多个页上,所有页的大小之和 大于等于文件大小。
12
关于虚拟内存的思考二
1. 如果一个物理页中存储了某个进程的代码段,当该物理页因 为内存紧张需要被重新分配给另外的进程时,需不需要将该 物理页中的内容回写到磁盘交互文件中? 2. 如何将一个硬盘文件映射到一个进程地址空间的指定位置上? (内存映射函数mmap) 3. 对应ARM等不区分I/O地址空间和内存地址空间的CPU,如果 已经知道了某外设寄存器的物理地址(通过该寄存器地址译 码电路获得),如何在Linux C程序中访问该寄存器? void *ioremap(unsigned long phys_addr, unsigned long size)用于 在页表中增加一个物理地址到虚拟地址映射。 4. 如何设置内存区域为“只读”存储区? 5. 如何以当前进程为模板快速克隆出另外一个新的进程? (fork函数与Copy On Write技术)
Present标志、Accessed标志、Dirty标志、Read/Write标志 、User/Supervisor标志、…… 如果present标志为0,分页单元就把这个线性地址存放在 处理器的CR2寄存器中,并产生一个14号缺页异常
8
两级页表
1. 为了节省内存,32位CPU采用了两级页表 2. 第一级为页目录,每个表项存储了第二级页表的物理地址。 3. 第二级页表的每个表项存储了一个虚拟页所对应物理页的物 理地址。 4. 32位的虚拟地址被分成3个域
13
IPC机制:共享内存
1. int shmget(key_t key, size_t size, int flag); • • 功能:得到一个共享内存标识符或创建一个共享内存对象 并返回共享内存标识符 key: 共享内存对象的全局标识,大于0的32位整数。通常 要求此值来源于ftok返回的IPC键值。如果该内存被映射到 同一进程地址空间,则令key取值为IPC_PRIVATE。 size:共享内存区的字节数 flag:读写的权限 返回值:成功返回共享存储的id,失败返回-1
进程 2 的页表
0 1 2 3 虚拟页 0
外页表
硬盘文件名 偏移量
进程 3 的页表
1 2 3
CPU负责查表(虚拟地址->物理地址),查表失败时触发缺页中断(14号); OS负责填充各个表的内容,并提供缺页中断的中断服务器程序。
关于页表
1. 在32位CPU上,地址空间为2^32,一个内存页大小为2^12, 则共有2^20个页,页编号范围0~2^20-1,因此页表中的一行 至少要用3个字节(存储页编号是必须的),但实际上页表中 一行占4个字节。 2. 80386CPU中一个页表项的定义如下:
目录(directory) 页表(Table) 页内偏移量(offset) 最高的10位 中间的10位 最低的12位
5. 程序中每产生一个32位的虚拟地址,CPU的MMU首先用最高 的10位查页目录获得第二级页表的物理地址,再用中间10位 查第二级页表获得物理页的起始地址,最后用该起始地址加 上偏移量offset( 最低的12位 )就得到了最终的物理地址。 6. 两次查表过程有可能会触发2次缺页中断。
2
用户地址空间与内核地址空间
1. Linux将每个进程的4GB的独立地址空间又划分为用 户地址空间(0x00000000 ~ 0xBFFFFFFF)和 内核 地址空间(0xC0000000 ~ 0xFFFFFFFF)两部分。 2. 操作系统内核代码和数据存放在内核地址空间;每 个进程自己私有的代码和数据存放在用户地址空间 3. 虽然Linux的内核代码和数据被映射到了每个进程的 地址空间中(所有进程看到的内容是相同的),但 在实际的物理内存中,只有内核代码和数据的一份 拷贝。
20
18
mmap内存映射
1. int munmap(void *start, size_t length) 取消映射关系 2. int msync(const void *start, size_t length, int flags) 将内存中的内容同步到文件
思考:
mmap函数执行时会一次性将整个被映射文件读入内存吗? 即用mmap函数映射一个大文件时会很耗时吗?
3
用户地址空间与内核地址空间
4
用户态与核心态
一般现代CPU都有几种不同的指令执行级别 在高执行级别下,代码可以执行特权指令,访问任意 的物理地址,这种CPU执行级别就对应着内核态 用户态指相应的低级别执行状态,代码的掌控范围会 受到限制,只能执行CPU指令集的一个子集 举例:intel x86 CPU有四种不同的执行级别0-3,Linux 只使用了其中的0级和3级分别来表示内核态和用户态 0xc0000000以上的内核地址空间只能在内核态下访问 ,0x00000000-0xbfffffff的用户地址空间在两种状态 下都可以访问 应用程序可以通过Linux系统调用由用户态进入内核态
19
mmap的应用
快速读写大文件,简化程序逻辑。 快速读写I/O设备(如V4L库) 创建进程间共享内存(可利用/dev/zero文件) 在用户态的应用程序中直接读写物理内存(即读写指定物理 地址上的内存单元)。 • /dev/mem是整个物理内存的全映像文件 • open("/dev/mem",O_RDWR|O_SYNC),然后mmap,接着 就可以用mmap的地址来访问物理内存 • 只有root用户才能这样做! • 如果CPU是内存与I/O统一编址方式,还可以利用上述方法 访问外设的寄存器,编写用户态的设备驱动程序。 5. 快速分配大内存(mmap配合MAP_ANONYMOUS 参数) 1. 2. 3. 4.
• • •
14
IPC机制:共享内存
1. void *shmat(int shmid, const void *addr, int flag); • 功能:连接共享内存标识符为shmid的共享内存,连接成 功后把共享内存区对象映射到调用进程的地址空间,随后 可像本地空间一样访问 • shmid:共享存储的id • addr:一般为0,表示连接到由内核选择的第一个可用地 址上,否则,如果flag没有指定SHM_RND,则连接到addr 所指定的地址上,如果flag为SHM_RND,则地址取整 • flag:SHM_RDONLY:为只读模式,其他为读写模式 • 返回值:如果成功,返回共享存储段地址,出错返回-1 2. int shmdt(void *addr); • addr:共享存储段的地址,以前调用shmat时的返回值 • 返回值
合集下载

Linux设置虚拟内存的教学与实战教程

Linux设置虚拟内存的教学与实战教程

Linux设置虚拟内存的教学与实战教程什么是虚拟内存?先直接摘抄⼀段 wikipedia 上的介绍。

虚拟内存是计算机系统内存管理的⼀种技术。

它使得应⽤程序认为它拥有连续的可⽤的内存(⼀个连续完整的地址空间),⽽实际上,它通常是被分隔成多个物理内存碎⽚,还有部分暂时存储在外部磁盘存储器上,在需要时进⾏数据交换。

对于 C 语⾔⾥⾯的变量,我们可以使⽤ & 运算符来获得其地址,既然是虚拟地址,就是指这个地址是虚拟的。

虚拟地址机制不是必须的,在简单的单⽚机中,编写的代码编译时都需要指定物理 RAM 空间分布,不会有虚拟地址的概念,地址就是指在 RAM 中的物理地址。

虚拟内存(之所以称为虚拟内存,是和系统中的逻辑内存和物理内存相对⽽⾔的,逻辑内存是站在进程⾓度看到的内存,因此是程序员关⼼的内容。

⽽物理内存是站在处理器⾓度看到的内存,由操作系统负责管理。

虚拟内存可以说是映射到这两种不同视⾓内存的⼀个技术⼿段。

)技术就是⼀种由操作系统接管的按需动态内存分配的⽅法,它允许程序不知不觉中使⽤⼤于实际物理空间⼤⼩的存储空间(其实是将程序需要的存储空间以页的形式分散存储在物理内存和磁盘上),所以说虚拟内存彻底解放了程序员,从此程序员不⽤过分关⼼程序的⼤⼩和载⼊,可以⾃由编写程序了,繁琐的事情都交给操作系统去做吧。

SWAP(意思是“交换”、“实物交易”)分区是Linux的交换分区。

它的功能就是在内存不够的情况下,操作系统先把内存中暂时不⽤的数据,存到硬盘的交换空间,腾出内存来让别的程序运⾏,当请求的数据不在内存中时,系统产⽣却页中断,内存管理器便将对应的内存页重新从硬盘调⼊物理内存。

(需要严重注意的是它和内存映射⽂件的区别,linux虚拟内存或者说交换分区是在磁盘中有⼀个指定的区域即swap。

)交换分区实际存在于磁盘中,不过Linux系统可以将它当作内存使⽤,当物理真实内存不⾜的时候交换分区就可以和真实内存进⾏数据交换。

操作系统中虚拟内存的管理

操作系统中虚拟内存的管理

操作系统中虚拟内存的管理在使用操作系统时,我们经常会涉及到虚拟内存的概念。

虚拟内存是一种通过硬盘来扩展计算机的物理内存,让计算机看起来拥有更多的内存空间,从而提升计算机的运行效率。

虚拟内存的管理是操作系统中非常重要的一部分,下面就来介绍一下操作系统中虚拟内存的管理。

一、内存分页内存分页是指将整个物理内存分成多个大小相同的分页,每个分页的大小通常为4KB或8KB。

然后将每个进程的虚拟内存也分成多个相同大小的虚拟页面,每个虚拟页面映射到一个物理页面。

这样一来,进程就可以按照页面单位来管理内存。

当进程访问一个虚拟页面时,操作系统会根据虚拟页面的映射关系,将其转换为物理页面并读取其内容。

如果虚拟页面没有被映射到物理页面,那么操作系统就需要将一个空闲的物理页面映射到该虚拟页面上,并将其内容从硬盘中读取进来。

二、页面置换随着进程的运行,部分物理页面会被频繁使用,而另一部分页面则很少使用甚至没有使用过。

为了更好地利用内存空间,操作系统需要对页面进行置换。

页面置换算法的目标是在物理页面不足时,寻找最适合置换出去的物理页面,并将其替换成要使用的新页面。

常见的页面置换算法有FIFO、LRU、Clock和Random等。

其中,FIFO算法是按照物理页面被加载的时间顺序来置换的,即最先加载进来的页面最先被置换出去。

LRU算法则是按照物理页面最近被使用的时间顺序来置换的。

这样,被最少使用的页面就会被优先置换出去,从而留出更多的页面空间给新页面使用。

三、页面缓存为了提高读取速度,操作系统会将最近使用的物理页面缓存到内存缓存区中,以便下一次访问时能够更快地读取。

而当物理页面不足时,操作系统也会优先将内存缓存区中的页面置换出去,以腾出空间给其他页面使用。

四、页面共享有些进程可能会需要共享同一个物理页面,以节省内存空间并提高系统性能。

比如多个进程在同时运行相同的程序时,它们所使用的代码部分可以共享同一个物理页面,减少了内存开销。

北京工业大学 操作系统软件课设 分析linux内存管理机制

北京工业大学 操作系统软件课设 分析linux内存管理机制

任务2分析Linux内核—内存管理学号____________姓名____________指导教师____________2019年12月一、摘要本次系统软件课程设计,我们小组选择的题目是分析Linux内核-内存管理。

阅读该部分的代码、了解其运行机制,深入理解Linux内存管理的相关具体实现过程。

Linux中,内存管理主要由段页式来进行管理的,涉及虚拟内存技术。

这其中涉及到三个关键内容:①每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址。

②虚拟地址可通过每个进程上的页表与物理地址进行映射,获得真正的物理地址。

③如果虚拟地址对应的物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已经耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。

与虚拟内存相关的主要有:与进程相关的结构体、映射的形成等等。

与物理页面相关的主要有:内存的分配、页面的换入换出等等。

本文将尽可能通过对Linux内存管理的主要的代码函数、相关功能实现及结构区阐释Linux系统内存管理的实现方式。

二、关键词虚拟地址空间、用户空间、内核空间、物理内存、虚拟内存、内存分配、页分配与释放、页的换入和换出、内存块的分配与释放、栈的静态分配、缺页异常。

三、引言计算机中的存储器分为主存储器和辅助存储器。

因为实际主存储器的容量比较小而不能满足多道程序的要求,所以作为一种解决策略,采用将程序一部分装入主存,把当前不被执行的部分暂时存放在辅助存储器中,用到时再立即调入主存中。

Linux内存管理就使用了这种解决策略,也就是所谓的虚拟内存技术。

基于此,我们将在这里阐述Linux内存管理技术,包括它的内存管理策略、内存分配策略、内存映射技术、内存交换、页面失效处理等等。

我们小组一共两位成员:郑鑫(17071101)、侯宇(17071125)。

考虑到每个文件以及函数功能以及相关内容,所做详细分工如下:由小组成员郑鑫负责vmalloc.c文件、page_io.c文件、page_alloc.c文件和mmap.c文件的阅读和分析。

分页式虚拟内存管理及Linux实现

分页式虚拟内存管理及Linux实现

p gO a e 调用d _ n n mo sp g 0 o a o y u _ a e 函数 ,获得一个新 的
页面。
3 、物理内存分配与回收 。在L n x i u 中,虚存区 间的分配在 前 ,物理页面 的分 配在后 。随着用户程序 的执行和结束 ,系统
个页可以映射到一个页帧 nr
换机构 。但是现在计算机使用的虚拟地址一般是3 位的 ,而且 大小相等且物理地址连续的两个块合并为一个块。 2
每次访 问内存都要进行地址转换 ,这将 严重影响 系统效率。现
表 等解决上述问题 。
4 、交换机 制 。物 理页面 的换入换 出主要过程 如下 ,其 中 释放 页面 。如 果一 个页 面变 为空 闲可 用 ,就把 该 页面 的
实中使用T B ( a s t n o k s e ufr L Trn l i L o ai B f )以及三级页 涉 及 Ln x中的 p g 结 构 ¥fe_ ra 构 。 ao d e iu ae [reae 结 1
2 、请求页面调度。 虚拟 内存管理 中,进程驻 留在次级存 p g 结构链入某个空 闲队 ̄ f e_ r a ae lr ea e ,同时页面的使用计数
P TE)包含有与主存中的页相对应的帧号 ,对应 的页是否在主 不断地分配和释放物理页面 ,这导致 在已分配的 内存块中分散
存中的存在位 ( P),页的 内容从上次装入至今是 否改变的修 着许多小的空 闲页面 ,即外碎片。外碎片 无法满足大块连续页
改 () 图 如 : 位 M 。 示 下
T r— — _ 磊_ ] i —
绍 其实 现 。

映射 了一个磁盘文件 ,n p g 域指向执行从磁盘读 入操 作的 o ae

边干边学linux_边学边干Linux内核指导

边干边学linux_边学边干Linux内核指导

边干边学linux:边学边干Linux内核指导——虚拟存储
疯狂代码 / ĵ:http://Linux/Article28340.html
; ; ; 虚拟地址由操作系统维护由MMU可以进行转换扩大了内存空间分页管理把内存分为页和页桢大小样个在磁盘个在内存页表就像个输入是页号输出是页桢号
; ; ; 页表可以是多级页表可以用TLB(Translation Lookaside Buffer)缓存Cache速度和成本介于内存和寄存器
; ; ; 页表项:禁止缓存Cache访问位保护位修改位存在位——页桢号
; ; ; 页面置换:最优算法先进先出和最近最少使用 (Lea Recently Used)
; ; ; Linux 虚拟内存管理
; ; ; 1.缺省页面大小8K每个进程维护自己张页表所以区别进程虚拟地址可能样
; ; ; 2.虚拟地址:0x2194 ——> 页面大小0x2000所以此地址在页面1处页内偏移地址是0x194如果页1映射为页桢4那么它物理地址是0x8000+0x194=0x8194
; ; ; 3.换页paging _disibledevent=> 2009-2-12 4:14:03
疯狂代码 /。

linux下虚拟内存如何设置

linux下虚拟内存如何设置

linux下虚拟内存如何设置Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。

Linux存在着许多不同的Linux版本,但它们都使用了Linux 内核。

下面是店铺带来的关于linux下虚拟内存如何设置的内容,欢迎阅读!linux下虚拟内存如何设置:swap空间就是虚拟内存,在物理内存不足时,有较大的用处。

查看内存空间大小:free -m // m表示显示的字节单位是m(megabytes)下面我们就来增加系统的 Swap 大小。

1.首先用命令free查看系统内 Swap 分区大小。

free -mtotal used free shared buffers cachedMem: 1002 964 38 0 21 410-/+ buffers/cache: 532 470Swap: 951 32 929可以看到 Swap 只有951M,不符合 Oracle-xe-client 的安装要求。

2.创建一个 Swap 文件。

mkdir swapcd swapsudo dd if=/dev/zero of=swapfile bs=1024 count=100000 出现下列提示,上面命令中的 count 即代表swap文件大小。

记录了 100000+0 的读入记录了 100000+0 的写出102400000 字节 (102 MB) 已复制,0.74704 秒,137 MB/秒把生成的文件转换成 Swap 文件sudo mkswap swapfileSetting up swapspace version 1, size = 102395 kBno label, UUID=09fde987-5567-498a-a60b-477e302a988b3.激活 Swap 文件。

sudo swapon swapfile再次查看 free -m 的结果。

total used free shared buffers cachedMem: 1002 967 34 0 22 410-/+ buffers/cache: 534 467Swap: 1053 32 1021添加成功。

kswapd原理

kswapd原理Kswapd是一种内核线程,它的主要任务是尝试回收被进程使用的内存,将其交换到磁盘上,以便系统中的总内存使用率得以控制。

在Linux系统中,如果内存使用率过高,系统可能会出现卡顿、延迟和崩溃等问题,而kswapd 线程则是解决这些问题的关键。

一、Linux系统的虚拟内存管理机制在Linux系统中,所有的进程都运行在独立的内存空间中,每个进程分配的内存大小是有限的。

当进程申请内存超出其分配的空间时,就会发生内存溢出,系统将其自动终止。

为了避免内存溢出,Linux系统引入了虚拟内存的概念。

虚拟内存是指将物理内存和磁盘空间结合起来使用,将进程所需的数据和代码保存在物理内存和磁盘空间中,实现内存扩展。

Linux系统中,虚拟内存管理机制主要由以下几个部分组成:1、页表:每个进程都拥有独立的页表,用于记录虚拟地址和物理地址之间的映射关系。

2、页面置换算法:Linux系统中采用了一系列的页面置换算法,主要包括最少使用算法(LRU)、时钟算法、快速淘汰算法等,用于实现页面的实际置换。

3、内存回收机制:Linux系统中还配备了一些内存回收机制,例如kswapd线程,用于回收闲置的物理内存,将其交换到磁盘上,以便更好地管理内存空间。

二、kswapd线程的工作原理在Linux系统中,kswapd线程主要负责回收闲置的物理内存,将其交换到磁盘上,并将这些空闲物理内存缓存起来,以供后续进程使用。

kswapd线程的工作原理可分为以下几个步骤:1、检查内存使用率kswapd线程会周期性地检查系统中的内存使用率,如果发现内存使用率过高,则会进入下一步操作。

2、选择可回收的物理内存kswapd线程会逐一检查系统中的物理内存,找到最适合回收的物理内存块。

通常情况下,kswapd线程会优先回收已经被缓存的物理内存块,这些内存块曾经被使用过,但目前已经闲置。

3、将物理内存交换到磁盘上一旦kswapd线程找到可回收的物理内存块,就会将其交换到磁盘上,释放出物理内存的空间,以便后续进程使用。

实验8Linux的内存管理


内存管理的概念
内存管理的定义
内存管理是指操作系统对计算机内存 资源的分配、回收、保护和扩充等一 系列操作,以确保系统高效、稳定地 运行。
内存管理的目标
提高内存利用率,减少内存碎片,实 现多任务环境下的内存共享和保护, 以及提供虚拟内存等。
Linux内存管理的特点
分段和分页机制
Linux采用分段和分页机制来管理内存,将物理内 存划分为大小相等的页框,同时将进程地址空间 划分为多个段,每个段对应一个页表项,实现地 址空间的隔离和权限控制。

03 通过实验操作和观察,加深对Linux内存管理的 理解和认识。
实验环境
操作系统
Linux(建议使用Ubuntu或CentOS等常见发行版 )
开发工具
GCC编译器、GDB调试器、Valgrind内存检测工 具等。
实验材料
一台配置有Linux操作系统的计算机,具备基本的 编程和调试能力。
02
Linux内存管理概述
VS
共享内存的实现方式
在Linux中,共享内存可以通过shmget() 、shmat()和shmdt()等系统调用来实现 。首先,使用shmget()函数创建一个共 享内存段;然后,使用shmat()函数将共 享内存段连接到当前进程的地址空间;最 后,使用shmdt()函数将共享内存段从当 前进程的地址空间中分离。
06
内存优化与性能提升
内存泄漏问题及其解决方案
内存泄漏定义
内存泄漏是指程序在申请内存后,未能正确释放,导致系统内存逐 渐耗尽的现象。
检测工具
使用Valgrind等内存检测工具,可以检测程序中的内存泄漏问题。
解决方案
及时释放不再使用的内存,避免不必要的内存申请,采用智能指针等 RAII技术来管理内存。

Linux虚拟存储技术的主要数据结构分析


图 1 三 层 地 址 映 射 示 意 图
以 i8 36来说 ,P C U实 际上是 按 两 层模 型进 行 地址 映射 的 , 就 需要 跳 过 中间 的 P 这 MD层 , 虚拟 的三 层 将
映射 落 实到具 体 的两层 映 射 . 一 方面 , P mi r 另 从 e u Po开始 , l m I 引入 了物理 地 址扩 充 功能 P E, me A 允许 将 地
p t e h中作 了如下 定义 : g  ̄l. 如果 所用 的 C U是 P n u r 以 上 时 , 择项 C N I X 6 P E为 1 否 P et m Po或 i 选 O FG 8 A , 则 为 0 根据 此选 项 , . 编译 时从 pt l一3ee. g be lv1h或 ptb 一 l e. a g l 2e 1h中选其 一 . ae v
静ic d nl e<am pt l 一 l e. u s / g be 2e 1h> a v
静 d fn ga l e ep tb e i

/*P E无 效 时两层 映 射 */ A
cc e ah

i t)d n ( o{}w i 0 i hl ) e(
静e df n i
3 虚 拟 存储 空 间 的 管理
2 页 表 的管 理
Lu i x内核的设计考虑 到了在各种不 同 C U上 的实现 , 了保证 可移植 性和兼 容性 ,i x内核在 页 目录和 n P 为 Ln u
页表 中间增设 了一层“ 中间 目录” 映射机制设计成 了三层 : 目录 P D、 , 页 G 中间 目录 P D、 M 页表 f , 图 1 r如 r 所示 .
在 i8 C U中 ,i x的 每个 进 程 拥 有 各 自独立 的 4 B虚 拟 地 址 空 间 , 中 0—3 B是 用 户 空 间 , 36 P Lu n G 其 G 3~

Linux基础知识点

Linux基础知识点(补充课上重点,ppt)第一章 Linux简介登录• 根用户名使用root,密码123456• 登陆后命令提示符【root @ host dev】• root用户的命令行提示符#• 普通用户的命令行提示符$文本虚拟控制台ttyLinux支持6个tty,tty1~tty6.系统启动后自动使用的是tty1. 使用Alt+F1~F6可以切换tty1~tty6。

Xwindow与字符控制台切换• xwindow图形界面---切换--->>文本控制台Ctrl+Alt+F2• 文本控制台---切换--->>xwindow图形界面Ctrl+Alt+F7关机• 立刻关机shutdown –h now• 关机后重启shutdown –r now或reboot切换用户命令——su在tty下,使用logout命令或exit命令退出系统.第二章文件系统Linux 文件系统类型ext2 ext3(常用) swapwindows:盘符组织文件linux:只有一个根目录/Linux树形目录结构:bin dev etc home lib root tmp usr var文件类型:文件名中不能含空格和某些特殊字符,如:! @ # $ %~ &* ( ) [ ] { } ' " \ / | ;< << >> >• 文件名和命令均要区分大小写• 文件名以. 开头,该文件为隐藏文件• Linux的文件类型大致可分为普通文件、可执行文件、链接文件和设备文件。

• 在Linux中,文件是否是可执行文件,不是由扩展名决定,而是由文件的属性决定。

Linux目录操作命令• 查看目录中的文件:ls• 改变当前目录命令:cd• 创建目录命令:mkdir• 显示当前工作目录命令:pwdls功能:显示目录内的文件和子目录列表• 命令格式:ls [参数选项] [目录或文件]• 参数选项:-a: 显示所有文件(包括隐藏文件)-l : 以长格式显示(文件大小、日期、权限等)ll如何用长格式列出/home目录下所有的文件包括隐藏文件?cd/home ll –a在/home目录下创建user目录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档