当前位置:文档之家› Linux内存管理初始化

Linux内存管理初始化

Linux内存管理初始化
Linux内存管理初始化

Linux内存管理初始化

内存管理子系统是linux内核最核心最重要的一部分,内核的其他部分都需要在内存管理子系统的基础上运行。而对其初始化是了解整个内存管理子系统的基础。对相关数据结构的初始化是从全局启动例程start_kernel开始的。本文详细描述了从bootloader跳转到linux 内核内存管理子系统初始化期间所做的操作,从而来加深对内存管理子系统知识的理解和掌握。

内核的入口是stext,这是在arch/arm/kernel/vmlinux.lds.S中指定的。而符号stext是在arch/arm/kernel/head.S中定义的。整个初始化分为两个阶段,首先是在head.S中用汇编代码执行一些平台相关的初始化,完成后跳转到start_kernel函数用C语言代码执行剩余的通用初始化部分。整个初始化流程图如下图所示:

一、启动条件

通常从系统上电到运行到linux kenel这部分的任务是由bootloader来完成。Boot loader在跳转到kernel之前要完成一些限制条件:

1、CPU必须处于SVC(supervisor)模式,并且IRQ和FIQ中断必须是禁止的;

2、MMU(内存管理单元)必须是关闭的, 此时虚拟地址对应物理地址;

3、数据cache(Data cache)必须是关闭的;

4、指令cache(Instructioncache)没有强制要求;

5、CPU通用寄存器0(r0)必须是0;

6、CPU通用寄存器1(r1)必须是ARM Linuxmachine type;

7、CPU通用寄存器2(r2)必须是kernelparameter list的物理地址;

二、汇编代码初始化部分

汇编代码部分主要完成的工作如下所示,下文只是概述head.S中各个函数完成的主要

功能,具体的技术细节,本文不再赘述。

? 确定processortype

? 确定machinetype

? 创建页表

? 调用平台特定的__cpu_flush函数

? 开启mmu

? 切换数据

? 最终跳转到start_kernel

三、C语言代码初始化部分

C语言代码初始化部分主要负责建立结点和内存域的数据结构、初始化页表、初始化用

于内存管理的伙伴系统。在启动过程中,尽管内存管理模块尚未初始化完成,但内核仍然需要分配内存以创建各种数据结构。bootmem分配器用于在启动阶段分配内存。所有涉及的实现都是在start_kernel函数中实现的,其中涉及到内存初始化的函数如下:

1、build_all_zonelist用于结点和内存域的初始化。

在linux系统中,内存划分结点,每个结点关联到系统中的一个处理器。各个结点又划分内存域,主要包括ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM。大部分系统只有一个内存结点,下文只针对此类系统。此函数用于初始化内存的结点和内存域。内核在

mm/page/page_alloc.c中定义了一个pglist_data的内存结点实例(contig_page_data)用于管理所有系统的内存。

build_all_zonelist用于初始化结点和内存域。该函数首先调用__build_all_zonelists,此函数遍历系统的每个内存结点,针对每个内存结点调用build_zonelists(),该函数的任务是在当前处理的结点和系统中其他结点的内存域之间建立一种等级次序。接下来,依据这种次序分配内存,如果在期望的结点内存域中,没有空闲内存,就去查找相邻结点的内存域。内核定义了内存的一个层次结构关系,首先试图分配廉价的内存,如果失败,则根据访问速度和容量,逐渐尝试分配更昂贵的内存。

高端内存最廉价,因为内核没有任何部分依赖于从该内存域分配的内存,如果高端内存用尽,对内核没有副作用,所以优先分配高端内存。

普通内存域的情况有所不同,许多内核数据结构必须保存在该内存域,而不能放置到高端内存域,因此如果普通内存域用尽,那么内核会面临内存紧张的情况。

DMA内存域最昂贵,因为它用于外设和系统之间的数据传输。

举例来讲,如果内核指定想要分配高端内存域。它首先在当前结点的高端内存域寻找适当的空闲内存段,如果失败,则查看该结点的普通内存域,如果还失败,则试图在该结点的DMA 内存域分配。如果在3个本地内存域都无法找到空闲内存,则查看其他结点。这种情况下,备选结点应该尽可能靠近主结点,以最小化访问非本地内存引起的性能损失。

该函数接下来计算所有剩余的内存页,存放到全局变量vm_total_pages中。接下来如果空闲内存页太少,则关闭页的可迁移性,即page_group_by_mobility_disabled置位。页的可迁移性是内核为了避免内存碎片而在linux2.6.24中加入的新特性。该特性把内存页分为不可移动内存页、可回收页和可移动页三种类型来避免内存碎片。

2、mem_init用于停用bootmem分配器并迁移到伙伴系统。

在系统初始化进行到伙伴系统分配器能够承担内存管理的责任后,必须停用bootmem分

配器。该函数遍历所有的内存域结点,对每个结点分别调用free_all_bootmem_node函数,停用bootmem分配器。该函数调用free_all_bootmem_core,首先扫描bootmem分配器位图,释放每个未用的页。到伙伴系统的接口是__free_pages_bootmem函数,该函数对

每个空闲内存页调用,该函数内部依赖于标准函数__free_page。它使得这些页并入到伙伴系统的数据结构,在其中作为空闲页,用于分配管理。在页位图已经完全扫描后,它占据的内存空间也必须释放掉,此后,只有伙伴系统可用于内存分配。

3、初始化slab分配器。

kmem_cache_init初始化内核用于小块内存区的分配器(slab分配器)。他在内核初始化阶段、伙伴系统启用之后调用。

kmem_cache_init创建系统中的第一个slab缓存,以便为kmem_cache的实例提供内存,为此,内核使用一个在编译时创建的静态数据(cache_cache)。该函数接下来初始化一般性的缓存,用作kmalloc内存的来源。为此,针对所需的各个缓存长度,分别调用

kmem_cache_create函数。

4、初始化页表,初始化bootmem分配器。

setup_arch是特定于体系结构的,用于初始化页表,初始化bootmem分配器。该函数的执行流程图如下:

4.1、setup_processor和setup_machine用来确定处理器类型和机器类型。

4.2、parse_targs用来解析从uboot传递过来的tag值。在uboot的do_bootm_linux函数中,会创建传递给内核的各个tag。tag的地址是由内核和uboot约定的,在uboot中是在函数board_init中将该约定好的地址保存在gd->bd->bi_boot_params中,如下所示:

gd->bd->bi_boot_params = CFG_BOOT_PARAMS;

在内核中,MACHINE_START定义了struct machine_desc数据结构,各成员函数在linux 启动的不同时期被调用。该结构体的boot_params成员存放的就是uboot传递给内核的tag 的起始地址。

MACHINE_START(hi3520v100,"hi3520v100")

.phys_io =IO_SPACE_PHYS_START,

.io_pg_offst =(IO_ADDRESS(IO_SPACE_PHYS_START) >> 18) & 0xfffc,

.boot_params =PHYS_OFFSET + 0x100,

.map_io =hisilicon_map_io,

.init_irq =hisilicon_init_irq,

.timer =&hisilicon_timer,

.init_machine = hisilicon_init_machine,

MACHINE_END

在uboot中通过setup_memory_tags来建立内存的tag,把物理内存的起始地址和大小记录在tag里,tag头用ATAG_MEM标识。内核中有一个tagtable的表,把各种表头的标识和解析函数关联起来,关于内存的如下所示:

__tagtable(ATAG_MEM, parse_tag_mem32);

当parse_targs找到以ATAG_MEM标识的tag后,调用parse_tag_mem32,把在uboot 中填充到tag里的内存起始地址和大小填充到全局变量meminfo数组中。

4.3、parse_cmdline解析命令行参数。

此函数解析由uboot传进来的命令行参数。在内核中,各个命令行参数的头都与相应的解析函数一一对应,关于内存,有如下对应:

__early_param("mem=", early_mem);

在内核中解析命令行中以"mem="开头的命令行,找到此命令行后,调用early_mem函数解析命令行。如果内核需要管理几段不同的内存,可以在uboot的bootarg环境变量中分别指定对应的内存段的起始地址和长度,如下所示:

mem=72M@0xe2000000mem=128M@0xe8000000

表示内核需要管理两段不连续的内存,第一段起始地址为0xe2000000,大小为72M,另外一段起始地址为0xe8000000,大小为128M,内核通过early_mem函数分别把这两段内存写入到meminfo的两个bank中。

4.4、paging_init函数用来初始化页表项,启用bootmem分配器。

4.4.1、build_mem_type_table用来建立各种类型的页表选项。该函数是为了给mem_types 数组中的各种类型的页表参数添加上我们的要求,主要是一级页表,二级页表,访问权限控制等标志位。

4.4.2、prepare_page_table函数清除一级页表中无效的页表,只保留物理内存在虚拟地址空间中的映射。

4.4.3、devicemaps_init函数用来清除VMALLOC_END之后的一级页表,分配vector page,调用mdesc->map_io来映射设备,mdesc->map_io即上文中提到的用MACHINE_START 定义的结构体中的成员,即hisilicon_map_io

4.4.4、bootmem_init函数在做一些必要的操作后,调用bootmem_init_node来初始化一级页表、启用bootmem分配器。

Linux内核的段页表项将4GB的地址空间分成4096个1MB的段(section),每个段页表项是一个unsigned long型变量,占用4字节,因此段页表项占用4096*4=16K的内存空间。而全局页表项的大小为2M,如下

#define PGDIR_SHIFT 21

#define PGDIR_SIZE (1UL<< PGDIR_SHIFT)

而全局页表项的数据结构pgd_t的定义如下

typedef struct { unsigned long pgd[2]; } pgd_t;

所以一个全局页表对应两个段页表,正好符合上述定义。

该函数首先根据meminfo数组中的bank数目,分别调用map_memory_bank来映射各个物理内存区的段页表项。该函数调用create_mapping来执行具体的映射工作。

建立完物理内存的页表映射后,内核会把物理内存的起始地址的页帧号放入start_pfn,物理内存的结束地址的页帧号放入end_pfn。这里要注意如果有多个内存bank时,start_pfn和end_pfn之间可能有空洞,拿上文提到的例子来讲,start_pfn和end_pfn之间是有内存空洞的,具体如下:

mem=72M@0xe2000000mem=128M@0xe8000000

start_pfn = 0xe2000000 >> PAGE_SHIFT;

end_pfn = (0xe8000000 + 8000000) >> PAGE_SHIFT;

在内核启动期间,由于基于物理内存的伙伴系统尚未初始化完成,但内核仍然需要分配内存以创建各种数据结构,bootmem分配器用于在启动阶段早期分配内存。bootmem分配器是一个最先适配分配器,该分配器使用一个位图来管理内存页,位图比特位的数目与系统中物理内存页的数目相同,比特位为1表示已用页,比特位为0表示空闲页。在需要分配内存时,分配器逐位扫描位图,直至找到一个能提供足够连续内存页的位置,即所谓的最先适配位置。bootmem分配器也必须管理一些数据,内核为系统中的每个结点都提供了一个bootmem_data结构的实例,用于该用途。当然,该结构不能动态分配,只能在编译时分配给内核,在UMA系统上,只有一个bootmem_data_t实例,即contig_bootmem_data。

typedef struct bootmem_data {

unsigned longnode_boot_start;

unsigned longnode_low_pfn;

void*node_bootmem_map;

unsigned longlast_offset;

unsigned longlast_pos;

unsigned longlast_success;

structlist_head list;

} bootmem_data_t;

node_boot_start保存了系统中物理内存的第一个页帧的编号。

node_low_pfn是系统物理内存最后一页的页帧编号。

node_bootmem_map 是指向bootmem分配器位图所在地址的指针。

last_pos是上一次分配的页帧编号。如果没有请求分配整个页帧,last_offset用作该页内部的偏移量,这使得bootmem分配器可以分配小于一整页的内存区。

last_success指定位图中上一次成功分配内存的位置,新的分配由此开始。

list:所有注册的bootmem分配器保存在一个链表中,表头是全局变量bdata_list。

内核接下来调用bootmem_bootmap_pages来计算bootmem分配器位图的大小(需要按页对齐),然后调用find_bootmap_pfn在物理内存中找到一块大小合适的内存,优先考虑内核的数据段的结尾处。接下来调用init_bootmem_node初始化bootmem分配器,该函数调用init_bootmem_core来填充bootmem_data_t结构中各个成员。

接下来调用free_bootmem_node进而调用free_bootmem_core把整个位图清零,把所有内存页标记为空闲页。然后在位图中分别把已用的内存页标记为1,已用的内存页包括位图占用的内存页、initrd占用的内存页、内核的代码段和数据段占用的内存,到此bootmem分配器正式建立起来了。

最后,free_area_init_node用来填充内存结点的数据结构pglist_data中的各个成员变量,其中zones_size表示物理内存的大小,包含内存空洞,zholes_size是内存空洞的页数。pgdat 是内存结点的数据结构,node_start_pfn是物理内存的起始页帧编号。该函数首先调用calculate_node_totalpages用来计算总的物理内存页帧数,包括内存空洞,保存在内存结点数据结构的node_spanned_pages成员中,然后计算去掉内存空洞后的实际物理内存页帧数,保存在node_present_pages成员中。

由于每个内存页都需要有一个struct page的数据结构来管理,所以该函数接下来调用

alloc_node_mem_map来创建所有物理内存页的struct page实例,指向该空间的指针不仅保存在pglist_data结构的node_mem_map中,还保存在全局变量mem_map中。

最后,free_area_init_node函数调用free_area_init_core来初始化pglist_data实例的各个内存域。该函数负责初始化各个zone结构中的成员。在ARM Linux中,没有

ZONE_HIGHMEM,ZONE_NORMAL初始化成0,所有可用的物理内存被放置在

ZONE_DMA。主要涉及两个函数:zone_pcp_init用来初始化冷热缓存页,

init_currently_empty_zone用来初始化伙伴系统的free_area列表,并将属于该内存域的所有page实例都设置成默认值。

zone_pcp_init负责初始化冷热缓存页。struct zone的pageset成员用于实现冷热页分配器。内核说页是热的,意味着页已经加载到了CPU高速缓存,与在内存中的页相比,其数据能够更快的访问。相反,冷页则不在高速缓存中。在多处理器系统上每个CPU都有一个或多个高速缓存,各个CPU的管理必须是独立的。pageset是一个数组,其容量与系统能够容纳的CPU数目的最大值相同。

struct zone{

………

Struct per_cpu_pageset pageset[NR_CPUS];

………

}

NR_CPUS是一个可以在编译时配置的宏常数。在单处理器上其值总是1,针对SMP系统编译的内核中,其值可能是2到32之间。数组元素的类型为per_cpu_pageset,定义如下

struct per_cpu_pageset {

structper_cpu_pages pcp[2]; /* 0: hot. 1: cold */

} ____cacheline_aligned_in_smp;

该结构有两个数组项,第一项管理热页,第二项管理冷页。per_cpu_pageset结构如下:

struct per_cpu_pages {

int count;

int high;

int batch;

structlist_head list;

};

count记录了与该列表相关的页的数目。

high是页数上限的水印值,在需要的情况下清空列表。

batch是每次添加页数的值。

zone_pcp_init函数首先用zone_batchsize计算出批量添加页的大小,保存在batch中,然后遍历系统中所有CPU,同时调用setup_pageset填充每个per_cpu_pageset实例的常量。根据计算得到的batch大约相当于内存域中页数的0.25‰。

init_currently_empty_zone用来初始化与伙伴系统相关的free_aera列表。该函数首先调用memmap_init_zone初始化上文分配好的保存在全局变量mem_map中的物理内存的struct page实例。然后调用zone_init_free_lists初始化free_aera空闲列表。空闲页的数目

free_area.nr_free当前仍然规定为0,直至停用bootmem分配器、普通的伙伴系统分配器生效时,才会设置正确的数值。

整个内核地址空间的划分请参见下图:

图中PAGE_OFFSET=0xc0000000,TEXT_OFFSET=0x00008000在arch/arm/makefile 中指定,swapper_pg_dir=0x00004000在head.S中指定。

地址空间的第一段用于将系统的所有物理内存页映射到内核的虚拟地址空间中。由于内核地址空间从偏移量0xc0000000开始,即3GiB,所以每个虚拟地址x都对应于物理地址x-0xc0000000,因此这是一个简单的线性偏移。

直接映射区:从PAGE_OFFSET(即0xc0000000)开始到high_memory的地址空间,在内核调用bootmem_init函数中,把high_memory的值设置为实际物理内存的结束地址对应的虚拟地址,最大不超过896M。当实际物理内存大于896M时,超出的部分映射为高端内存区。物理内存的起始地址的16K未用,从swapper_pg_dir到0xc0008000的16K存放段地址的页表项内容,前文已经描述过了。从0xc0008000开始存放内核的代码段、初始化的数据段和未初始化的数据段。紧接着内核的代码段和数据段的是bootmem分配器的位图区域,上文中页提到过。

VMALLOC区:虚拟内存中连续、但物理内存中不连续的内存区,可以在vmalloc区域分配。该机制通常用于用户过程,内核自身会试图尽力避免非连续的物理内存。但在已经运行了很长时间的系统上,在内核需要物理内存时,可能出现可用内存不连续的情况。此类情况,主要出现在动态加载模块时。vmalloc区域在何处结束取决于是否启用了高端内存支持。如果没有启用,那么就不需要持久映射区,因为整个物理内存都是可以直接映射的。因此根据配置的不同,该区域结束于持久内核映射或固定映射区域的起始处,中间总会留下两页,作为vmalloc区与这两个区域之间的保护措施。

持久映射区:用于将高端内存域中的非持久页映射到内核。

固定映射区:是与物理地址空间中的固定页关联的虚拟地址空间页,但具体关联的页帧可以自由选择。它通过固定公式与物理内存关联的直接映射页相反,虚拟固定映射地址与物理内存位置之间的关联可以自行定义。

在直接映射区和vmalloc区域之间有一个8M的缺口,这个缺口可用作针对任何内核故障的保护措施。如果访问越界地址,则访问失败并生成一个异常,报告该错误。如果vmalloc 区域紧接着直接映射,那么访问将成功而不会注意到错误。

到此,整个linux的内存管理子系统初始化完成了,具体的细节部分请参考代码阅读体会。https://www.doczj.com/doc/c510248748.html,/wushuan10141/article/details/6916773

史上最全Linux系统命令及使用方法详解(程序员)

Linux 系统命令及其使用详解(大全) (来源: 中国系统分析员) cat cd chmod chown cp cut 名称:cat 使用权限:所有使用者 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到基本输出(萤幕或加> fileName 到另一个档案) 参数: -n 或--number 由 1 开始对所有输出的行数编号 -b 或--number-nonblank 和-n 相似,只不过对于空白行不编号 -s 或--squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或--show-nonprinting 范例: cat -n textfile1 > textfile2 把textfile1 的档案内容加上行号后输入textfile2 这个档案里cat -b textfile1 textfile2 >> textfile3 把textfile1 和textfile2 的档案内容加上行号(空白行不加)之后将内容附加到textfile3 名称:cd 使用权限:所有使用者 使用方式:cd [dirName] 说明:变换工作目录至dirName。其中dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory (也就是刚login 时所在的目录).另外,"~" 也表示为home directory 的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录。 范例:跳到/usr/bin/: cd /usr/bin 跳到自己的home directory: cd ~ 跳到目前目录的上上两层: cd ../.. 指令名称:chmod 使用权限:所有使用者 使用方式:chmod [-cfvR] [--help] [--version] mode file... 说明:Linux/Unix 的档案存取权限分为三级:档案拥有者,群组,其他。利用chmod 可以藉以控制档案如何被他人所存取。 把计: mode:权限设定字串,格式如下:[ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者

Linux操作系统考试题库(1)

一、选择题 1)下列关于操作系统的叙述中,哪一条是不正确的?( C ) A.操作系统管理计算机系统中的各种资源 B.操作系统 为用户提供良好的界面 C.操作系统与用户程序必须交替运行 D.操作系统 位于各种软件的最底层 2)的发展始于()年,它是有()的一名大学生开发 的。( A ) A. 1990、芬兰 B. 1991、芬兰 C. 1993、美 国 D. 1991、波兰 3)内核不包括的子系统是( D )。(进程管理系统\内存管 理系统\管理系统\虚拟文件系统\进程间同性间通信子系统) A.进程管理系统 B.内存管理系统管理系 统 D.硬件管理系统 4)中权限最大的账户是( B )。 A. B. C. D. 5)在通常情况下,登录桌面环境,需要( B )。 A.任意一个帐户B.有效合法的用户帐号和密码C.任意一个登录密码D.本机地址 6)在 5中要配置计算机的地址,需要打开哪个菜单( C )。 A.“应用程序”→“” B.“系统”→“首选项”→“网络代理”

C.“系统”→“管理”→“网络” D.“位置”→“网络服务器” 7)配置网卡时,下面哪一项一般不需要配置( D )。 地址 B.子网掩码 C.默认网关地址地址 8)文件权限中保存了( D )信息。 A.文件所有者的权限 B.文件所有者所在组的权限 C.其他用户的权限 D.以上都包括 9)文件系统的文件都按其作用分门别类地放在相关的目录中, 对于外部设备文件,一般应将其放在( C )目录中。 10)某文件的组外成员的权限为只读;所有者有全部权限;组 内的权限为读与写,则该文件的权限为( D )。 A. 467 B. 674 C. 476 D. 764 11)文件1的访问权限为,现要增加所有用户的执行权限和同 组用户的写权限,下列命令正确的是( A )。 A. 1 B. 765 1 C. 1 D. 1 12)当前安装的主机中位于第二个接口的接口挂接一块40的 硬盘,其在中的设备文件名为( B )。 13)已知系统中的唯一一块硬盘是第一个接口的设备,该硬盘 按顺序有3个主分区和一个扩展分区,这个扩展分区又划分了

linux内核之内存管理

Linux内核之内存管理 作者:harvey wang 邮箱:harvey.perfect@https://www.doczj.com/doc/c510248748.html, 新浪博客地址:https://www.doczj.com/doc/c510248748.html,/harveyperfect,有关于减肥和学习英语相关的博文,欢迎交流 把linux内存管理分为下面四个层面 (一)硬件辅助的虚实地址转换 (二)内核管理的内存相关 (三)单个进程的内存管理 (四)malloc软件 (一)处理器硬件辅助的虚实地址转换(以x86为例) 在x86中虚实地址转换分为段式转换和页转换。段转换过程是由逻辑地址(或称为虚拟地址)转换为线性地址;页转换过程则是将线性地址转换为物理地址。段转换示意图如下 X86支持两种段,gdt和ldt(全局描述段表和局部描述符段表),在linux中只使用了4个全局描述符表,内核空间和用户空间分别两个gdt,分别对应各自的代码段和数据段。也可以认为在linux中变相地disable了x86的段式转换功能。 页转换示意图如下

在linux中x86 的cr3寄存器(页表基地址寄存器)保存在进程的上下文中,在进程切换时会保存或回复该寄存器的内容,这样每个进程都有自己的转换页表,从而保证了每个进程有自己的虚拟空间。 (二)内核管理的内存相关 从几个概念展开内存管理:node、zone、buddy、slab 1、Node SGI Altix3000系统的两个结点 如上图,NUMA系统的结点通常是由一组CPU(如,SGI Altix 3000是2个Itanium2 CPU)和本地内存组成。由于每个结点都有自己的本地内存,因此全系统的内存在物理上是分布的,每个结点访问本地内存和访问其它结点的远地内存的延迟是不同的,为了优化对NUMA 系统的支持,引进了Node 来将NUMA 物理内存进行划分为不同的Node。而操作系统也必须能感知硬件的拓扑结构,优化系统的访存。

Linux常用命令

(1)基于虚拟机的Linux操作系统的使用 1.启动VMware Workstation应用程序,启动Windows以后,选择开始—程序——VMware—VMware Workstation,出现如图7—1所示窗口。 2.选择File—Open选择安装好的Linux虚拟机文件,或者直接单击Start this virtual machine 启动Linux操作系统。 3.启动系统后需要输入用户名和密码,如图7—2所示,用户名为“root”,密码为“jsjxy308”。 4.启动终端,成功进入系统后,选择“应用程序”—“系统工具”—“终端”。 5.在终端中执行Linux 命令,终端运行以后,就可以在这里输入Linux命令,并按回车键执行。 (2)文件与目录相关命令的使用 1.查询/bin目录,看一看有哪些常用的命令文件在该目录下: ll /bin 2.进入/tmp目录下,新建目录myshare: cd /tmp mkdir myshare ls –ld myshare/ 3.用pwd命令查看当前所在的目录: pwd 4.新建testfile文件: touch testfile ls -l 5.设置该文件的权限模式: chomd 755 testfile ls -l testfile 6.把该文件备份到/tmp/myshare目录下,并改名为testfile.bak: cp testfile myshare/testfile.bak ls -l myshare/ 7.在/root目录下为该文件创建1个符号连接: ln -s /tmp/testfile /root/testfile.ln ls -l /root/testfile.ln 8.搜索inittab 文件中含有initdefault字符串的行: cat /etc/inittab | grep initdefault (3)磁盘管理与维护命令的使用 1)Linux 下使用光盘步骤 1.确认光驱对应的设备文件: ll /dev/cdrom 2.挂载光盘: mout -t iso9600/dev/cdrom test/dir 1.查询挂载后的目录: ll /media/cdrom 2.卸载光盘: umount /dev/cdrom 2)Linux下USB设备的使用

linux内存管理子系统 笔记

4-4 linux内存管理子系统 4-4-1 linux内存管理(参考课件) 物理地址:cpu地址总线上寻址物理内存的地址信号,是地址变换的最终结果 逻辑地址:程序代码经过编译后,出现在汇编程序中的地址(程序设计时使用的地址) 线性地址:又名虚拟地址,32位cpu架构下4G地址空间 CPU要将一个逻辑地址转换为物理地址,需要两步: 1、首先CPU利用段式内存管理单元,将逻辑地址转换成线性地址; 2、再利用页式内存管理单元,把线性地址最终转换为物理地址 相关公式: 逻辑地址=段基地址+段内偏移量(段基地址寄存器+段偏移寄存器)(通用的) 16位CPU:逻辑地址=段基地址+段内偏移量(段基地址寄存器+段偏移寄存器) 线性地址=段寄存器的值×16+逻辑地址的偏移部分 物理地址=线性地址(没有页式管理) 32位CPU:逻辑地址=段基地址+段内偏移量(段基地址寄存器+段偏移寄存器) 线性地址=段寄存器的值+逻辑地址的偏移部分 物理地址<——>线性地址(mapping转换) ARM32位:逻辑地址=段基地址+段内偏移量(段基地址寄存器+段偏移寄存器) 逻辑地址=段内偏移量(段基地址为0) 线性地址=逻辑地址=段内偏移量(32位不用乘以32) 物理地址<——>线性地址(mapping转换) ************************!!以下都是x86模式下!!********************************* 一、段式管理 1.1、16位CPU:(没有页式管理) 1.1.1、段式管理的由来: 16位CPU内部有20位地址总线,可寻址2的20次方即1M的内存空间,但16位CPU 只有16位的寄存器,因此只能访问2的16次方即64K。因此就采用了内存分段的管理模式,在CPU内部加入了段寄存器,这样1M被分成若干个逻辑段,每个逻辑段的要求如下: 1、逻辑段的起始地址(段地址)必须是16的整数倍,即最后4个二进制位须全是0 (因此不必保存)。 2、逻辑段的最大容量为64K。 1.1.2、物理地址的形成方式: 段地址:将段寄存器中的数值左移4位补4个0(乘以16),得到实际的段地址。 段偏移:在段偏移寄存器中。 1)逻辑地址=段基地址+段内偏移量(段基地址寄存器+段偏移寄存器) 2)由逻辑地址得到物理地址的公式为:(因为没有页式管理,所以这一步就得到了物理地址)物理地址PA=段寄存器的值×16+逻辑地址的偏移部分(注意!!)(段与段可能会重叠)

Linux操作系统部分复习题答案

第一章 Linux系统简介 一、思考题 1.UNIX的大部分代码是用一种流行的程序设计语言编写的,该语言是什么? C语言 2.UNIX系统的特点有哪些? ·多任务 ·多用户 ·并行处理能力 ·设备无关性 ·工具 ·错误处理 ·强大的网络功能 ·开放性 3.什么是Linux?其创始人是谁? Linux是一个功能强大的操作系统,同时它也是一个自由软件,是免费的、源代码开放的、可以自由使用的UNIX兼容产品。其创始人是Linus 4.Linux操作系统的诞生、发展和成长过程始终依赖者的重要支柱都有哪些? ·UNIX操作系统 ·MINIX操作系统 ·GNU计划 ·POSIX标准 ·Internet 5.简述Linux系统的特点。 ·自由软件 ·良好的兼容性 ·多用户、多任务 ·良好的界面 ·丰富的网络功能 ·可靠地安全性、稳定性 ·支持多种平台 6.常见的Linux的发行版本有哪些? ·Red Hat Linux ·Caldera OpenLinux ·SuSE Linux ·TurboLinux ·红旗Linux ·中软Linux 二、选择题 1.Linux最初是以MINIX 操作系统为模板而开发出来的。 2.关于Linux核版本的说法,下列选项中错误的是(C)。 A.表示为主版本号.次版本号.修正号B.1.2.3表示稳定的发行版 C.1.3.3表示稳定的发行版D.2.2.5表示对核2.2的第5次修正 (补充:次版本号为偶数的是稳定版本;为奇数的则是测试版本。)

3.Linux属于自由软件。 4.自由软件的含义是软件可以自由修改和发布。 5.一下不具有多任务性的操作系统是DOS 第二章 Linux系统入门 一、思考题 1.Linux系统有哪些运行级别?其含义是什么? 可用级别为0~6,其中0:关闭系统;6:重新启动,其他略。 2.Linux系统下经常使用的两种桌面环境是什么? GNOME和KDE 3.什么是X-Window系统?它有什么特点? 图形界面(X-Window)是在Linux操作系统中提供的图形化用户界面(GUI),其支持的视窗系统也称为X,它的特点有:它采用了“客户端-服务器”模式;它是一个跨平台的操作环境。 7.默认情况下,超级用户和普通用户的登录提示符分别是什么? # 和 $ 二、选择题 1.系统引导的过程一般包括如下的几步:①MBR中的引导装载程序启动。②用户登录。③Linux核运行。④BIOS自检。正确的顺序是④①③②。 2.Linux中使用Ctrl+Alt+BackSpace 组合键可以关闭X-Window图形用户界面。 3.字符界面下使用init命令关机所用的参数是0 。(参数6是重新启动) 4.字符界面下使用shutdown命令重启计算机时所用的参数是–r 。 5.使用man命令调阅相关的帮助信息时,用于逐页地下翻的功能键是Space 。 第三章 shell与shell命令 一、思考题 1.shell的基本功能有哪些? 命令解释执行、文件名替换、输入/输出重定向、连同管道建立、系统环境设置和shell编程。 2.Linux系统中的主要目录有哪些? /:系统的根目录 /dev:系统的设备目录 /home:用户主目录 /root:root用户主目录 /boot:Linux的启动目录 /usr:用户级目录 3.工作目录及其父目录课分别用什么表示? . 和 .. 5.常用的shell环境变量有哪些? ·HOME:用户家目录的完全路径名 ·LOGNAME:登录用户名 ·IFS:命令行部域分割符 ·PATH:由冒号分隔的目录路径名

Linux操作系统期末复习题(含答案)

Linux 期末复习题(一) 一、选择题 (每小题2分,共50分) 2.在Ubuntu Linux中,系统默认的(A)用户对整个系统拥有完全的控制权。 A. root B. guest C. administrator D.supervistor. 3. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( B ) A. NID B. PID C. UID D. CID 4. 下面哪个命令是用来定义shell的全局变量( D ) A. exportfs B. alias C. exports D. export 5. 哪个目录存放用户密码信息( B ) A. /boot B. /etc C. /var D. /dev 6. 默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。 A. /usr B. /home C. /root D. /etc 7. . 当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D )目录。 A. /home B. /bin C. /etc D. /dev 8. 如果要列出一个目录下的所有文件需要使用命令行( C )。 A. ls –l B. ls C. ls –a(所有) D. ls –d 9. 哪个命令可以将普通用户转换成超级用户(D ) A. super B. passwd C. tar D. su 10. 除非特别指定,cp假定要拷贝的文件在下面哪个目录下( D ) A. 用户目录 B. home目录 C. root目录 D. 当前目录 11. 在vi编辑器里,命令"dd"用来删除当前的( A ) A. 行 B. 变量 C. 字 D. 字符 14. 按下(A )键能终止当前运行的命令 A. Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D 17. 用"rm -i",系统会提示什么来让你确认( B ) A. 命令行的每个选项 B. 是否真的删除 C. 是否有写的权限 D. 文件的位置 18. 以下哪个命令可以终止一个用户的所有进程( D ) A. skillall B. skill C. kill D. killall 19.在Ubuntu Linux中,一般用(D )命令来查看网络接口的状态 A. ping B. ipconfig C. winipcfg D ifconfig 20. vi中哪条命令是不保存强制退出( C )(第五章) A. :wq B. :wq! C. :q! D. :quit 22.在下列分区中,Linux默认的分区是(B ) A. FAT32 B. EXT3 C FAT .D NTFS 24.如果用户想对某一命令详细的了解,可用(C) A. ls B. help (内部) C. man(列举的信息多) D dir 二、填空题 (每空1分,共10分) 26. 在Linux系统中,以_文件的_方式访问设备。 29. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限644,该文件属性是目录。 30. 静态路由设定后,若网络拓扑结构发生变化,需由__系统管理员___修改路由的设置。 33. 编写的Shell程序运行前必须赋予该脚本文件__执行___权限。

《深入理解LINUX内存管理》学习笔记.

引子 为什么要写这个笔记: 1,这本书的中文版翻译了太垃圾,没法阅读。阅读英文原版,可以很好的理解作者的思路。作此笔记备忘 2,一直以来学习LINUX kernel的知识缺乏系统化,借对这本书的学习,系统化的学习一下LINUX kernel。 3,自己一直在做一个too small,too simple的单进程,特权模式,64bit保护模式的称不上OS的OS,已经做完了bootloader, 构思kernel的实现的时候,困惑在内存管理的实现上,阅读这本书,希望能有利于自己的OS的编写。 4,克服惰性,多读书,希望一天能阅读5页,争取半年内阅读完这本原版700多页的巨著。 不足: 我不可能完全理解LINUX 内存管理的精髓,肯定有很多地方理解错误。希望大家能够指正,以便提高,谢谢。 学习方法: 可能您第一次阅读的时候很多地方都不理解,不用担心。那您可能需要阅读一些文件系统的知识。 或者阅读全部笔记后,再回头阅读,有些地方您就理解了。 言归正传: 一、概要 可用工具 CodeViz: 生成代码调用关系图的工具,这个工具我现在还没有去使用,有兴趣的可以自己试试去建立调用关系图。 http://www.csn.ul.ie/~mel/projects/codeviz/ Linux cross reference (LXR): 以web的方式阅读和查找LINUX内核源代码的工具。这个工具安装相当麻烦,我建议直接到它的官方网站直接读代码。 http://lxr.linux.no/linux+v2.6.24/ 模块 LINUX内存管理代码模块主要分为4个部分: 1.Out of memory 代码在mm/oom_kill.c 貌似用于杀进程的时候对内存的操作 2.虚拟内存的分配代码在mm/vmalloc.c

LINUX操作系统习题

《LINUX操作系统》习题 理论部分: 一、单项选择题: 1.Linux的创始人是谁() A、Turbolinux B、AT&T Bell Laboratry C、University of Helsinki D、Linus Torvalds 2.在Linux中,命令解释器是哪个() A、管道 B、分级文件系统 C、字符型处理器 D、 shell 3.Linux安装程序提供了两个引导装载程序( ) A、GROUP和LLTO B、DIR和COID C、GRUB和LILO D、以上都不是 4.如果当前目录是/home/sea/china,那么“china”的父目录是哪个目录() A、/home/sea B、/home/ C、/ D、/sea 5.在Linux中,要删除abc目录及其全部内容的命令为:() A、rm abc B、rm -r abc C、rmdir abc D、rmdir -r abc 6.在Linux环境下,能实现域名解析的功能软件模块是:() A、apache B、dhcpd C、BIND D、SQUID 7.创建的辅助DNS服务器无法获得主DNS区域信息,哪种方法可以解决() A、重新启动主DNS服务器 B、手动从主DNS服务器复制区域文件到辅助DNS服务器 C、重新启动辅助DNS服务器 D、在主DNS服务器中利用allow-transfer命令设置“允许区域复制” 8.假定kernel支持vfat分区,下面哪一个操作是将/dev/hda1,一个Windows分区加载到/win目录?() A、mount -t windows /win /dev/hda1 B、mount -fs=msdos /dev/hda1 /win C、mount -s win /dev/hda1 /win D、mount –t vfat /dev/hda1 /win 9.显示用户的主目录的命令是什么() A、echo $HOME B、echo $USERDIR C、echo $ECHO D、 echo $ENV 10.系统中有用户user1和user2,同属于users组。在user1用户目录下有一文件file1,它拥有644的权限,如果user2用户想修改user1用户目录下的file1文件,应拥有( )权限。 A、744 B、664 C、646 D、746

《Linux操作系统》部分习题答案

第一章Linux系统简介 一、思考题 1.UNIX的大部分代码是用一种流行的程序设计语言编写的,该语言是什么? C语言 2.UNIX系统的特点有哪些? ·多任务 ·多用户 ·并行处理能力 ·设备无关性 ·工具 ·错误处理 ·强大的网络功能 ·开放性 3.什么是Linux?其创始人是谁? Linux是一个功能强大的操作系统,同时它也是一个自由软件,是免费的、源代码开放的、可以自由使用的UNIX兼容产品。其创始人是Linus 4.Linux操作系统的诞生、发展和成长过程始终依赖者的重要支柱都有哪些? ·UNIX操作系统 ·MINIX操作系统 ·GNU计划 ·POSIX标准 ·Internet 5.简述Linux系统的特点。 ·自由软件 ·良好的兼容性 ·多用户、多任务 ·良好的界面 ·丰富的网络功能 ·可靠地安全性、稳定性 ·支持多种平台 6.常见的Linux的发行版本有哪些? ·Red Hat Linux ·Caldera OpenLinux ·SuSE Linux ·TurboLinux ·红旗Linux ·中软Linux 二、选择题 1.Linux最初是以MINIX 操作系统为模板而开发出来的。 2.关于Linux内核版本的说法,下列选项中错误的是(C)。 A.表示为主版本号.次版本号.修正号B.1.2.3表示稳定的发行版 C.1.3.3表示稳定的发行版D.2.2.5表示对内核2.2的第5次修正 (补充:次版本号为偶数的是稳定版本;为奇数的则是测试版本。)

3.Linux属于自由软件。 4.自由软件的含义是软件可以自由修改和发布。 5.一下不具有多任务性的操作系统是DOS 第二章Linux系统入门 一、思考题 1.Linux系统有哪些运行级别?其含义是什么? 可用级别为0~6,其中0:关闭系统;6:重新启动,其他略。 2.Linux系统下经常使用的两种桌面环境是什么? GNOME和KDE 3.什么是X-Window系统?它有什么特点? 图形界面(X-Window)是在Linux操作系统中提供的图形化用户界面(GUI),其支持的视窗系统也称为X,它的特点有:它采用了“客户端-服务器”模式;它是一个跨平台的操作环境。 7.默认情况下,超级用户和普通用户的登录提示符分别是什么? # 和$ 二、选择题 1.系统引导的过程一般包括如下的几步:①MBR中的引导装载程序启动。②用户登录。③Linux内核运行。④BIOS自检。正确的顺序是④①③②。 2.Linux中使用Ctrl+Alt+BackSpace 组合键可以关闭X-Window图形用户界面。 3.字符界面下使用init命令关机所用的参数是0 。(参数6是重新启动) 4.字符界面下使用shutdown命令重启计算机时所用的参数是–r 。 5.使用man命令调阅相关的帮助信息时,用于逐页地下翻的功能键是Space 。 第三章shell与shell命令 一、思考题 1.shell的基本功能有哪些? 命令解释执行、文件名替换、输入/输出重定向、连同管道建立、系统环境设置和shell编程。 2.Linux系统中的主要目录有哪些? /:系统的根目录 /dev:系统的设备目录 /home:用户主目录 /root:root用户主目录 /boot:Linux的启动目录 /usr:用户级目录 3.工作目录及其父目录课分别用什么表示? . 和.. 5.常用的shell环境变量有哪些? ·HOME:用户家目录的完全路径名 ·LOGNAME:登录用户名 ·IFS:命令行内部域分割符 ·PATH:由冒号分隔的目录路径名

linux操作系统基本命令

实验二常用命令和Vi编辑器 一.实验目的: 1.熟悉shell的常用命令; 2.掌握Linux系统终端方式使用的编辑器vi; 3.学习vi的启动、存盘、文本输入、现有文件的打开、光标移动、复制/剪贴、查找/替换等命令。 二.实验环境: Red Hat Enterprise Linux 6以上 三.实验内容: 1.练习使用shell的常用命令; 2.熟练掌握vi编辑器的使用。 四、实验练习: 1、使用Shell命令的简单操作 (1)查看当前目录命令:#pwd (2)切换目录命令:cd #cd(进入用户主目录) #cd..(回到上一级目录) #cd../..(回到上两级目录,以此类推) #cd/(进入根目录/) #cd/etc(进入目录/etc) (3)查看文件内容命令:cat

#cd/etc(进入目录/etc) #catxinetd.conf (查看/etc/xinetd.conf内容) #catxinetd.conf |more(若文件过长,分页方式查看文件内容)注意:cat命令只能查看文本文件内容,不能查看二进制文件内容 (4)查看命令帮助:man,--help,info,whatis #manls #mancp #ls --help (5)显示指定目录下的内容:ls 参考命令手册,使用ls命令结合其相关选项查看Linux的目录结构,了解各个目录存放与系统相关的文件; 2.使用Shell命令的高级操作 1)命令补齐功能 用date命令查看系统当前时间,在输入da后,按tab键,让shell自动补齐命令的后半部分。 用mkdir命令创建新的目录。首先输入第一个字母m,然后按tab键,由于以m开头的命令太多,shell会提示是否显示全部的可能命令,输入n。 再多输入一个字母k,按tab键,让shell列出以mk开头的所有命令的列表。 在列表中查找mkdir命令,看看还需要多输入几个字母才能确定mkdir这个命令,然后输入需要的字母,再按tab键,让shell补齐剩下的命令。 最后输入要创建的目录名,按回车键执行命令。 多试几个命令利用tab键补齐。

Linux操作系统及常用命令

Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。 下面我将比较常用的命令,按照系统中的作用分成以下6个部分 安装和登录命令:shutdown、reboot、install、mount、umount、exit、last; 文件处理命令:file、mkdir、grep、find、mv、ls、diff、cat; 系统管理相关命令:df、top、free、adduser、groupadd、kill、crontab; 网络操作命令:ifconfig、ping、netstat、telnet、ftp、route、scp、finger; 系统安全相关命令:passwd、su、chmod、chown、sudo、ps、who; 其它命令:tar、unzip、unarj、man 安装与登陆命令 shutdown 1.作用 shutdown命令的作用是关闭计算机,它的使用权限是超级用户root。 2.格式 shutdown [-h][-i][-k][-m][-t] 3.重要参数 -t:在改变到其它运行级别之前,告诉init程序多久以后关机。 -k:并不真正关机,只是送警告信号给每位登录者。 -h:关机后关闭电源。 -c:cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。 -F:在重启计算机时强迫fsck。 -time:设定关机前的时间。 -m: 将系统改为单用户模式。 -i:关机时显示系统信息。 -r:重启。 4.实用例子 远程重启满天星服务器192.168.0.25 shutdown -m \\192.168.0.25 -r -f -t 0 远程重启兴通博服务器192.168.0.41 shutdown -m \\192.168.0.41 -r -f -t 0 reboot 1.作用 reboot命令的作用是重新启动计算机,它的使用权限是系统管理者root。 2.格式

Linux操作系统试题

《Linux操作系统试卷》A (课程代码:专业:学习层次:专科年级:) 本试题需在【答题册】作答。(试题总分100分) 一、选择题(共30题,每小题2分,满分60分) 1、linux中存放各用户帐号的文件是( C)。 A. shadow B. group C. passwd D. gshadow 2、文件权限读、写、执行的三种标志符号依次是( A)。 A .r w x B . x r w C .r d x D.s r w 3、如果执行命令 #chmod 746 file.txt,那么该文件的权限是( A)。 A. rwxr--rw- B. rw-r--r— C. --xr—rwx D. rwxr--r— 4、Samba服务器的配置文件是( D)。 A httpd.conf B inetd.conf C rc.samba D smb.conf 5、linux系统通过(C ) 命令给其他用户发消息。 A less B mesg y C write D echo to 6、Linux系统的联机帮助命令是( D)。 A. tar B. Cd C. Mkdir D. Man 7、下列关于操作系统的叙述中,哪一条是不正确的?( C ) A.操作系统管理计算机系统中的各种资源 B.操作系统为用户提供良好的界面 C.操作系统与用户程序必须交替运行 D.操作系统位于各种软件的最底层 8、在通常情况下,登录Linux 桌面环境,需要( B )。 A.任意一个帐户 B.有效合法的用户帐号和密码 C.任意一个登录密码D.本机IP 地址 9、Linux 中权限最大的账户是( B )。 A. admin B. root C. guest D. test 10、Linux的发展始于()年,它是由()的一名大学生开发的。( A ) A. 1990、芬兰 B. 1991、芬兰 C. 1993、美国 D. 1991、波兰 11、在redhat Linux系统中,下列哪个命令可以用来查看kernel版本信息:( D ) A.check B. ls kernel C.kernel D.uname 12、哪一个是终止一个前台进程可能用到的命令和操作: ( B )。 A.kill B.+c C.shut down D.halt 13、DHCP是动态主机配置协议的简称,其作用是可以使网络管理员通过一台服务器来管理一个网络系统,自动地为一个网络中的主机分配( D )地址。 A.网络 B.MAC C.DNS D.IP 14、LINUX操作系统是一种( D )。 A、单用户单进程系统 B、多用户单进程系统 C、单用户多进程系统 D、多用户多进程系统 15、Linux的吉祥物是( C ) A、一个手持叉子的红色小恶魔 B、一个绿色的蜥蜴 C、一个企鹅 D、一顶红色帽子 16、下面的操作系统中,不属于网络操作系统的是( D )。 A、Netware B、UNIX C、Windows NT D、DOS 17、改变文件所有者的命令为( C )。 A chmod B touch C chown D cat 18、Linux安装程序提供了两个引导装载程序(A )。 A.GROUP和LLTO B.DIR和COID C.GRUB和LILO D.DIR和GRUB 19、配置网卡时,下面哪一项一般不需要配置( D )。 A.IP地址 B.子网掩码 C.默认网关地址 D.MAC地址 20、在创建Linux分区时,一定要创建( D )两个分区 A. FAT/NTFS B. FAT/SWAP C. NTFS/SWAP D.SWAP/根分区 21、哪个目录存放用户密码信息( B ) A. /boot B. /etc C. /var D. /dev 22、默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。 A. /usr B. /home C. /root D. /etc 23、哪个命令可以将普通用户转换成超级用户(D )。 A. super B. passwd C. tar D. su 24、在vi编辑器里,命令"dd"用来删除当前的( A )。 A. 行 B. 变量 C. 字 D. 字符 25、下面哪个命令用来启动X Window ( C )。 A. runx B. Startx C. startX D. xwin 26、vi中哪条命令是不保存强制退出( C )。 A. :wq B. :wq! C. :q! D. :quit 27、用户编写了一个文本文件a.txt,想将该文件名称改为txt.a,下列命令( D)可以实现。 A. cd a.txt xt.a B. echo a.txt > txt.a C. rm a.txt txt.a D. cat a.txt > txt.a

Linux内存管理实验

1 《unix 操作系统教程》课程实验报告 实验名称 Linux 内存管理实验 实验序号 5 姓 名 系院专业 班 级 学 号 实验日期 2012.11.28 指导教师 成 绩 一、实验目的 1. 通过在Linux 环境下对内存管理的基本操作,感性认识Linux 如何对内存进行管理。 2. 利用readelf 和objdump 观测 linux 下的内存地址映射过程以及进程的虚拟地址空间。 二、实验内容与要求 (1)按照实验内容完成实验操作步骤,学习内存管理中的一些常用命令 (2)理解linux 中逻辑地址、线性地址的概念。 (3)提交实验报告。 三、实验设备 地点: 实验实训中心A4-2 设备:计算机一台 linux 操作系统

2 四、实验步骤与测试 实验一 free 命令显示显示内存的使用情况(使用的和空闲的),包括物理内存、交换区内存、内核缓冲区内存。不包括共享内存。free 命令默认选项为-k 语法: free [-bkmotV] [-s <间隔秒数>]选项介绍: -b: 以Byte 为单位显示内存使用情况; -k: 以KB 为单位显示内存使用情况; -m: 以MB 为单位显示内存使用情况; -o: 不显示缓冲区调节列; -s<间隔秒数>: 每间隔指定时间执行一次free 命令; -t: 显示内存总和列; -V: 显示版本信息; (1)free -k: 以KB 为单位显示内存使用情况; 解释:total: 内存总量: 3355508(k) used: 已经使用的内存量: 490664(k) free: 空闲的内存量: 2864844(k) shared: 当前已经废弃不用,总量是0(k) buffers: 25164(k) Buffer Cache 内存量: 263480(k) cached: Page Cache 内存量: 21436(k) (2)free –m -s 5:以M 为单位,5秒显示以下内存信息 解释:以上为每隔5秒显示内存信息,由以上图可知:两次内存使用情况没有变化。 (3)free -o: 不显示缓冲区调节列; 解释:由以上可知Buffer Cache 这一列没有显示出来。 (4)free -t: 显示内存总和列;

Linux(centos)的常用基本命令

Linux的常用基本命令。 首先启动Linux。启动完毕后需要进行用户的登录,选择登陆的用户不同自然权限也不一样,其中“系统管理员”拥有最高权限。 在启动Linux后屏幕出现如下界面显示: …… Red Hat Linux release 9 (Shrike) Kernel2.4.20.8 on an i686 login: 输入:root(管理员名)后,计算机显示输口令(password:),输入你的口令即可。当计算机出现一个“#”提示符时,表明你登录成功! 屏幕显示Linux提示符:[root@localhost root]#_ 这里需要说明的是“Red Hat Linux release 9 (Shrike)”表示当前使用的操作系统的名称及版本。“2.4.20.8”表示Linux操作系统的核 心版本编号。“i686”表示该台电脑使用的CPU的等级。 下面我们来介绍常用基本命令 一,注销,关机,重启 注销系统的logout命令 1,Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可: [root@localhost root]#logout Red Hat Linuxrelease 9(Shike) Kernel2.4.20.8 on an i686 Login: ←回到登陆的画面 2,关机或重新启动的shutdown命令 Shutdown命令可以关闭所有程序,依照用户的需要,重新启动或关机。 参数说明如下:  立即关机:-h 参数让系统立即关机。范例如下: [root@localhost root]#shutdown –h now ←要求系统立即关机  指定关机时间:time参数可指定关机的时间;或设置多久时间后运行shutdown命令,范例如下: [root@localhost root]#shutdown now ←立刻关机

《LINUX网络操作系统》试题及其答案

最新资料,word文档,可以自由编辑!! 精 品 文 档 下 载 【本页是封面,下载后可以删除!】 广州工程技术职业学院

信息工程(系)院(2009--2010学年第2学期) 《LINUX操作系统》期末考试复习题 理论部分: 一、单项选择题: 1.Linux的创始人是谁(D ) A、Turbolinux B、AT&T Bell Laboratry C、University of Helsinki D、Linus Torvalds 2.在Linux中,命令解释器是哪个( D ) A、管道 B、分级文件系统 C、字符型处理器 D、 shell 3.Linux安装程序提供了两个引导装载程序( C ) A、GROUP和LLTO B、DIR和COID C、GRUB和LILO D、以上都不是 4.如果当前目录是/home/sea/china,那么“china”的父目录是哪个目录( A ) A、/home/sea B、/home/ C、/ D、/sea 5.在Linux中,要删除abc目录及其全部内容的命令为:( B ) A、rm abc B、rm -r abc C、rmdir abc D、rmdir -r abc 6.在Linux环境下,能实现域名解析的功能软件模块是:( C ) A、apache B、dhcpd C、BIND D、SQUID 7.创建的辅助DNS服务器无法获得主DNS区域信息,哪种方法可以解决( D ) A、重新启动主DNS服务器 B、手动从主DNS服务器复制区域文件到辅助DNS服务器 C、重新启动辅助DNS服务器 D、在主DNS服务器中利用allow-transfer命令设置“允许区域复制” 8.假定kernel支持vfat分区,下面哪一个操作是将/dev/hda1,一个Windows分区加载到/win目录?( D ) A、mount -t windows /win /dev/hda1 B、mount -fs=msdos /dev/hda1 /win C、mount -s win /dev/hda1 /win D、mount –t vfat /dev/hda1 /win 9.显示用户的主目录的命令是什么( A ) A、echo $HOME B、echo $USERDIR C、echo $ECHO D、 echo $ENV 10.系统中有用户user1和user2,同属于users组。在user1用户目录下有一文件file1,它拥有644的权限,如果user2用户想修改user1用户目录下的file1文件,应拥有( B )权限。 A、744 B、664 C、646 D、746

Linux操作系统内存管理

Linux操作系统内存管理 摘要: Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘,腾出内存给其他目的。当原来的内容又要使用时,再读回内存。这对用户全透明:运行于Linux的程序只看到大量的可用内存而不甘心哪部分在磁盘上。当然,读写硬盘比真的内存慢(慢千倍),所以程序运行较慢。用做虚拟内存的这部分硬盘叫对换空间。 Linux可以使用文件系统中的普通文件或单独的分区作为对换空间。对换分区更快,但对换文件更易于改变大小(无须对硬盘重分区)。如果知道要多少对换空间,应该用对换分区;如果不能确认,可以先用对换文件,用一段时间后再根据所需空间建立对换分区。 Linux允许同时使用多个对换分区和/或对换文件。即如果偶尔需要更多的对换空间,可以随时建立一个额外的对换文件。 Linux是一个遵循POSIX(Portable Operating System Interface)标准的操作系统,它继承了UNIX系统优秀的设计思想,拥有简练、容错强、高效而且稳定的内核。此外Linux还具备其他操作系统所不能比拟的优点。①:完全免费; ②:内核源代码完全公开。 Linux内核拥有一个功能完备的内存管理子系统,它增加了对NUMA(非均匀存储结构)体系结构的支持并且使用了基于区(ZONE)的物理内存管理方法,从而保持了物理上连续分布、而逻辑上统一的内存模式和传统的共享内存编程模型,使得系统的性能得以极大的扩展。这样Linux不仅能够满足传统的桌面应用,而且还能满足高端服务器市场的需要。目前,Linux不仅在Internet服务器上表现出色,而且还可以胜任大型数据库系统的服务器。 关键字:虚拟内存,物理内存管理,虚拟内存管理 一、Linux存储管理的基本框架 Linux内核采用虚拟页式存储管理,采用三次映射机制实现从线性地址到物理地址的映射。其中PGD为页面目录,PMD为中间目录,PT为页面表。具体的映射过程为: ⑴从CR3寄存器中找到PGD基地址; ⑵以线性地址的最高位段为下标,在PGD中找到指向PMD的指针;

相关主题
文本预览
相关文档 最新文档