linux内存管理子系统 笔记
深入理解linux内核笔记1
郑重声明:未经本人允许,不得用于商业或非商业的转载和使用,如有需要请联系:yrj1978@hotmail.com引子为什么要写这个笔记:1,这本书的中文版翻译了太垃圾,没法阅读。
阅读英文原版,可以很好的理解作者的思路。
作此笔记备忘2,一直以来学习LINUXkernel的知识缺乏系统化,借对这本书的学习,系统化的学习一下LINUXkernel。
3,自己一直在做一个toosmall,toosimple的单进程,特权模式,64bit保护模式的称不上OS的OS,已经做完了bootloader,构思kernel的实现的时候,困惑在内存管理的实现上,阅读这本书,希望能有利于自己的OS的编写。
4,克服惰性,多读书,希望一天能阅读5页,争取半年内阅读完这本原版700多页的巨著。
不足:我不可能完全理解LINUX内存管理的精髓,肯定有很多地方理解错误。
希望大家能够指正,以便提高,谢谢。
学习方法:可能您第一次阅读的时候很多地方都不理解,不用担心。
那您可能需要阅读一些文件系统的知识。
或者阅读全部笔记后,再回头阅读,有些地方您就理解了。
言归正传:一、概要可用工具CodeViz:生成代码调用关系图的工具,这个工具我现在还没有去使用,有兴趣的可以自己试试去建立调用关系图。
http://www.csn.ul.ie/ ̄mel/projects/codeviz/Linuxcrossreference(LXR):以web的方式阅读和查找LINUX内核源代码的工具。
这个工具安装相当麻烦,我建议直接到它的官方网站直接读代码。
http://lxr.linux.no/linux+v2.6.24/模块LINUX内存管理代码模块主要分为4个部分:1.Outofmemory代码在mm/oom_kill.c貌似用于杀进程的时候对内存的操作2.虚拟内存的分配代码在mm/vmalloc.c3.物理内存页面分配代码在mm/page_alloc.cVMA(virtualmemoryaddresses)的创建和进程内的内存区域的管理4.这些模块,贯穿与其他kernel代码之中,形成更复杂的系统模块,如页面替换策略,buffer的输入输出等中间插段广告Linux文化T恤,淘宝销售,有兴趣的可以购买。
linux笔记全(无图版)
linux笔记全(⽆图版)1、ls 查看当前⽬录下的所有内容⿊⾊的是⽂件,蓝⾊的是⽂件夹,也就是⽬录2、rm -f anaconda-ks. cfg 彻底删除⽂件(如不确定,则需要先保存备份,也就是快照)3、ifconfig 查看⽹卡的配置信息(ip地址等)4、ifconfig ens33 192.168.18. 201 /24(⽹络地址/⼦⽹掩码)更改ip地址5、systemctl restart network 重启⽹络服务6、桥接模式,直接可以进⾏通信(同⼀⽹段,配置ip)7、能不能通信的2个条件:在同⼀个物理⽹络内,ip地址也在同⼀⽹段内8、仅主机模式,虚拟机和物理机不能进⾏通信,相当于虚拟机和物理机进⾏了隔离与笔记本(真机)通信截图9、NAT模式,⾃动分配⽹络地址和⽹关,以及dns,可以直接上⽹可以访问互联⽹内的主机,但互联⽹内的主机不能访问本机(max特点)10、route -n 查看⽹关11、cat /etc/resolv. conf 查看dns(注意cat后⾯有⼀个空格,空格不可少)12、验证nat模式可以直接上⽹13、shell:通常指linux的字符界⾯,图形界⾯和字符界⾯都属于shell,但图形界⾯的shell常称为gui,字符界⾯的shell常称为cli14、cat /etc/shells 查看⽂件内容(linux⾥⾯提供的所有的shell)15、linux默认使⽤的shell是bash的shell16、echo $SHELL 查看当前使⽤的shell17、shell默认指的是bash,它的应⽤是最⼴泛的18、linux是彻底的多⽤户多任务,它可以直接多个⽤户同时进⾏操作19、ctrl+alt+f2-f6 对应5个shell ctrl+alt+f1 开始图形界⾯shell 作⽤:如何开始shell(也就是如何打开命令界⾯)20、虚拟终端的缩写为tty, 在字符界⾯下执⾏“tty"命令就可以显⽰⽤户⽬前所在的终端编号(终端名称)。
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础今天的笔记主要是关于Linux操作系统根底的相关学问。
那就从我⾯前的电脑开端讲起。
计算机和操作系统计算机主要包括五个部分:运算器,控制器,存储器,输⼊设备和输出设备。
通常,运算器,控制器再加上其他⼀些部件如寄存器等构成了我们通常所说的CPU(central processing unit),存储器则主要是内存。
运算器,控制器和存储器可以实现数据的处理.但是数据从何⽽来,运算之后的结果去往哪⾥?这就需要输⼊设备和输出设备(I/O设备)。
我们通常⽤到的输⼊设备包括键盘⿏标等,输出设备为屏幕,打印机等。
值得⼀提的是,计算机中有个叫做硬盘的东西,它并不是存储器,⽽是⼀个I/O设备。
在将数据读取到内存时,它是⼀个输⼊设备;⽽将结果保存到磁盘时,它就变成了⼀个输出设备。
这么多设备整合在⼀起,就成了⼀台计算机。
它可以接收我们的指令(键盘⿏标),通过运算(CPU),把结果展⽰给我们(屏幕,硬盘等)。
但是这么多硬件是如何协调作⽤,共同完成⼀个任务⽽不会我⾏我素地乱来呢?我们需要⼀个东西,它可以控制硬件有序地⼯作,各⾃执⾏⾃⼰的任务,这个东西就是操作系统(Operating System)。
操作系统是⼀个特殊的软件,它的任务就是硬件管理—控制CPU的运算,控制内存的分配,控制计算机的⼏乎⼀切。
假如⼀台电脑没有操作系统,它可能只是⼀个艺术品,或者⼀堆废铁。
⼀个完整的操作系统包括内核和⼀些辅助软件。
内核的主要任务就是进⾏硬件管理,它是⼀个操作系统最基础最底层的东西。
内核若想很好地控制硬件并使其发挥相应的功能,需要和硬件相识相知相爱,他俩可以成为完美的⼀对,全都仰仗于驱动的帮忙。
驱动是硬件的灵魂,它向操作系统提供了访问和使⽤硬件的接⼝,以便在某项任务中最⾼效地调⽤硬件。
什么是LinuxLinux就是⼀个操作系统,它可以管理整个计算机硬件,并且可以接收我们的指令,来指挥硬件完成相应的任务,并把结果反馈给我们。
鸟哥的linux私房菜(基础篇)学习笔记
鸟哥的linux私房菜(基础篇)学习笔记鸟哥的linux私房菜(基础篇)是一本非常好的Linux入门教材,它全面介绍了Linux 的基础知识,包括Linux的安装、文件系统、用户管理、进程管理、磁盘管理、文件编辑器、Shell编程以及Linux网络等方面。
本文将简单介绍一些我学习这本书时的笔记和心得,以期为Linux新手提供一些帮助。
1. 操作系统和内核操作系统是由内核和外壳组成的,内核是操作系统最基础的组成部分,它负责处理硬件和软件的交互,包括驱动程序、内存管理、进程管理和文件系统等。
而外壳则是用户和操作系统进行交互的界面,我们可以通过命令行或者图形化界面与系统进行交互。
2.文件系统在Linux系统中,所有资料都以文件的形式保存在文件系统中,文件系统采用树形结构。
在Linux中,根目录是"/",其他目录都是在根目录下面的子目录。
我们可以使用ls 命令来查看文件目录和文件,也可以使用cd命令来进入和退出目录,另外,文件名是区分大小写的。
3.用户管理在Linux中,每个用户都有自己的ID号、用户名和密码。
通过用户管理,我们可以添加、删除或修改用户,另外,我们可以通过权限控制来限制普通用户访问系统的某些文件或命令,使系统更安全。
4.进程管理在Linux中,每个程序都是一个进程,我们可以使用ps命令查看系统中运行的进程,也可以使用kill命令来终止特定的进程。
另外,我们可以使用top命令来查看系统中当前占用CPU资源最多的进程,以便优化系统性能。
5.磁盘管理Linux系统中的磁盘分为硬盘和分区,我们可以使用fdisk命令来分区,也可以使用mkfs命令来格式化分区,以便在系统中进行挂载。
另外,我们可以使用df命令来查看文件系统的使用情况,以便合理管理磁盘空间。
6.文件编辑器在Linux中,有很多种文件编辑器,如vi、vim、nano等。
其中,vi是最常用的编辑器,而vim是vi的增强版,它提供了更多的功能和快捷键。
实验九Linux内存
内核空间(所有进 程及内核共享)
永久内存映射区(4M)
动态内存映射区 (min 120M)
非连续区 vmalloc()
用户空间(对系统 其他进程不可见)
直接内存映射区 (max 896M)
0x00000000
0xC0000000
连续区 kmalloc()
3
1.2 Linux内存管理—虚拟内存的实现
❖ 释放原先申请的内存空间free()
释放内存后,不能再去访问被释放的内存空间 不能两次释放相同的指针 C语言中,malloc/free 需配套使用
10
实验九 Linux内存管理
❖ 预备知识
Linux内存管理 Linux内存分配 Linux内存回收
❖ 实验指导
内存信息的监视 内存的申请和释放
❖ 实验目的、内容
11
3.1 实验目的
❖ 掌握Linux虚拟内存管理的原理 ❖ 掌握Linux中动态内存操作函数的使用方法 ❖ 掌握Linux监测内存使用情况的方法
12
3.2 实验内容
❖ 利用系统提供的内存操作函数进行内存的申请、使 用和释放
❖ 利用系统提供的内存操作函数进行内存的申请、调 整、使用和释放
Ioremap
实现已知物理地址到虚拟 地址的映射
适用于物理地址已知的场合, 如设备驱动
alloc_bootmem
在启动kernel时,预留一段 内存,内核看不见
小于理内存大小,内存管理
要求较高
6
1.3 Linux内存回收
❖ 堆内存:程序从堆中分配的、大小任意的、使用完 后必须显示释放的内存
❖ 堆内存的分配:malloc()、realloc () 、new () ❖ 对内存的回收:free () 、delete ()
实验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的内存管理
total Mem: 256024 −/+ buffers/cache: Swap: 522072
used 192284 80604
free 63740 75420
shared 0
buffers 10676
cached 101004
0
522072
表8-1中第二行输出(Mem:)显示物理 中第二行输出(Mem:) 内存:total列显示共有的可用内存 列显示共有的可用内存( 内存:total列显示共有的可用内存(不显示 核心使用的物理内存,通常大约1MB), 核心使用的物理内存,通常大约1MB), used列显示被使用的内存总额 free列显示 used列显示被使用的内存总额,free列显示 列显示被使用的内存总额, 全部空闲的内存,shared列显示多个进程共 全部空闲的内存,shared列显示多个进程共 享的内存总额,buffers列显示磁盘缓存的当 享的内存总额,buffers列显示磁盘缓存的当 前大小。 前大小。 表8-1中第二行输出(Swap)显示交换 中第二行输出(Swap) 空间的信息,与上一行类似。 空间的信息,与上一行类似。如果该行为全 0,则没有使用交换空间。 则没有使用交换空间。
1.实时监控内存使用情况 (1)在命令行用“free”命令监控内存使 在命令行用“ 用情况
在提示符后输入命令free:# 在提示符后输入命令free:#free :#free 表8-1所示为输出情况。 所示为输出情况。
表8-1
一个256MB的RAM和512MB交换空间的系统情况 的 一个 和 交换空间的系统情况
Linux的内存管理 Linux的内存管理
一、实验目的 二、实验工具与设备 三、实验预备知识 四、实验内容和步骤 五、实验总结
linux操作系统知识点
Linux 操作系统基础知识概览以下是一些关于Linux 操作系统的常见知识点:1.Linux 基础:●Linux 的起源和发展历史●Linux 的主要组成部分:内核、Shell、文件系统等●常见的Linux 发行版(如Ubuntu、Debian、CentOS 等)●常用的命令行工具和基本命令(如ls、cd、mkdir、rm 等)2.用户和权限管理:●用户账户的创建和管理●用户组的概念和使用●文件和目录的权限设置和管理●sudo 权限和root 用户的重要性3.文件系统:●Linux 文件系统的层级结构●常见的文件系统类型(如ext4、XFS、Btrfs 等)●挂载和卸载文件系统●磁盘和分区管理工具(如fdisk、parted 等)4.进程管理:●进程的概念和属性●进程的创建、终止和管理●进程状态的了解和监控●进程间通信的方式(如管道、信号、共享内存等)5.网络和安全性:●网络配置和网络接口管理●网络命令和工具(如ifconfig、ping、ssh 等)●防火墙和安全性措施(如iptables、SELinux 等)●远程访问和远程管理(如SSH、SCP、rsync 等)6.软件包管理:●软件包管理系统(如apt、yum、dnf 等)●软件包的安装、升级和卸载●软件包的依赖关系和解决依赖问题●软件源和仓库的管理7.Shell 脚本编程:●Shell 脚本的基础语法和结构●变量、条件语句、循环和函数的使用●Shell 命令和管道的组合●脚本的调试和错误处理以上只是Linux 操作系统知识的一些常见方面,涵盖了基础知识、用户和权限管理、文件系统、进程管理、网络和安全性、软件包管理以及Shell 脚本编程等。
要深入学习Linux,建议进一步学习和实践这些知识点,并探索更多高级主题,如网络服务配置、系统性能优化等。
Linux操作系统中的内存管理和优化技术
Linux操作系统中的内存管理和优化技术在Linux操作系统中,内存管理是一项非常重要的任务。
因为在计算机系统中,内存是最主要的资源之一,也是最容易被浪费或滥用的资源之一。
因此,在Linux系统中要做好内存管理,就必须要清楚该系统如何使用内存、怎样管理内存,以及如何优化内存使用。
一、Linux内存的分类在Linux系统中,我们一般将内存分为两种类型:物理内存和虚拟内存。
物理内存是指计算机实际存在的内存,而虚拟内存是指计算机中的硬盘空间,它在计算机中被用作为一种虚拟化内存的技术。
这种技术使得计算机可以虚拟出额外的内存空间,从而提高系统的内存使用效率。
二、Linux内存的使用在Linux系统中,内存不是一次性分配给所有程序使用的,而是按需分配的。
当系统需要更多内存时,它会从空闲的内存中分配出一部分,然后再使用这些内存来支持系统进程和应用程序。
此外,Linux系统中还有一个内存缓存,它可以帮助系统将经常被访问的数据存储在内存中,以便快速响应用户请求。
三、Linux内存管理在Linux系统中,内存管理模块负责管理系统的内存使用。
这个模块会跟踪系统内存使用情况,并将一部分内存分配给正在运行的进程和应用程序。
此外,如果系统内存使用过量,内存管理模块还能回收不必要的内存,并将其分配给更需要的进程或应用程序。
四、Linux内存优化技术1. 内存调整在Linux系统中,我们可以使用内存调整技术来优化内存使用。
这种技术可以通过修改内核参数来增加系统的内存使用效率。
我们可以使用sysctl命令来修改内核参数。
2. 内存抖动在Linux系统中,如果内存使用过量,就会出现内存抖动的情况。
内存抖动是指系统频繁地将一页内存从内存中换出,然后再将其换入内存。
这种过程会导致系统速度变慢,因此我们需要采取一些措施来优化内存使用。
我们可以在系统中使用Swap分区和Swap文件来降低内存抖动的风险。
3. 内存清理在Linux系统中,我们可以使用内存清理技术来优化内存使用。
Linux学习笔记一(文件和目录操作)
Linux学习笔记⼀(⽂件和⽬录操作)1.基本shell操作命令解析器--根据命令的名字,调⽤对应的可执⾏程序shell--unix操作系统bash--Linux操作系统(⽂件系统)Linux⽂件系统的存储单元是块在磁盘上存储的时候每个⽂件都有⼀个inode--i节点,保存了⼀些⽂件信息,通过iNode找到对应的⽂件a.快捷键b.虚拟终端history--查询命令的历史记录ctrl+p == 向上的箭头,查询上⼀个命令ctrl+n == 向下的箭头,查询下⼀个命令ctrl+b 向左移动backctrl+f 向右移动forwardctrl+a 移动到⾏⾸ctrl+e 移动到⾏尾ctrl+h 刪除光标前⾯的字符ctrl+d 刪除光标覆盖的字符ctrl+u 刪除光标前⾯的所有字符ctrl+k 删除光标位置到⾏尾的字符ctrl+l或者clear命令清理屏幕c.命令和路径补齐tab智能提⽰键,按⼀次没反应说明有很多符合条件的命令,再按⼀次出现符合条件的命令列表cd ⽬录 + 连续两次tab,显⽰⽬录下⼀级的所有路径d.centos7防⽕墙操作systemctl start firewalld.service 启动systemctl enable firewalld.service 开机启动systemctl stop firewalld.service 停⽌systemctl disable firewalld.service 禁⽌开机启动systemctl status firewalld.service 查看状态firewall-cmd --state 查看状态2.Linux系统⽬录结构ls 路径(查询当前路径下的所有⽂件)/根⽬录下的⽬录说明:/bin bin是binary的缩写,这个⽬录存放着经常使⽤的命令可执⾏程序/boot 存放的是启动Linux时的⼀些核⼼⽂件,包括⼀些连接⽂件以及镜像⽂件(开机启动项)/dev 是Device(设备)的缩写,该⽬录存放的是Linux的外部设备,在Linux中访问设备的⽅式和访问⽂件的⽅式是相同的(Linux奉⾏⼀切皆⽂件,它会把所有硬件外设抽象成设备⽂件存到dev⽬录之下,⽐如⿏标键盘)/etc ⽤来存放所有系统管理所需要的配置⽂件和⼦⽬录/home ⽤户的主⽬录,在Linux中,每个⽤户都有⼀个⾃⼰的⽬录,⼀般该⽬录名是以⽤户的账号命名。
(完整)详细linux学习笔记
一、linux文件系统linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。
文件系统树状结构如下:/ 根目录┏━━━┳━━━┳━━━┳━━┳━━━┳━━┳━━┳━━┳━━━┳━━━━━┳━━┓bin home dev etc lib sbin tmp usr var lost+found rootlinux采用的是树型结构。
最上层是根目录,其他的所有目录都是从根目录出发而生成的。
微软的DOS和windows也是采用树型结构,但是在DOS和windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。
但是在linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。
从结构上讲,各个磁盘分区上的树型目录不一定是并列的。
下面列出linux的一些主要目录的功用/bin:存放用户命令文件。
/home:存放用户主目录文件。
/dev:存放设备特殊文件。
/etc:存放系统管理和配置文件。
/etc/rc.d:存放启动的配置文件和脚本/lib:存放标准程序设计库,又叫动态链接共享库。
类似windows里的.dll文件/sbin:存放系统管理命令。
/tmp:存放公用的临时文件存储点。
/root:存放系统管理员的用户文件。
/mnt:存放让用户临时挂载其他的文件系统。
/lost+found:用于存放系统非正常关机产生的零散文件。
/proc:存放虚拟的目录,是系统内存的映射。
/var:存放某些大文件的溢出区,比方说各种服务的日志文件。
/usr:存放最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
Linux内核支持十多种不同类型的文件系统,对于Red Hat Linux,系统默认使用ext2或ext3和swap文件系统,下面对Linux常用的文件系统作一个简单介绍。
ext2、ext3与swap文件系统介绍:ext是第一个专门为Linux设计的文件系统类型,称为扩展文件系统,在Linux发展的早期,起过重要的作用。
linux学习笔记(系统管理篇)
shell 命令的敲法: 命令 参数 1 参数 2 参数定界:用到” ‘ ‘”(单引号) 用单引号括起的如’abc def ‘是告诉 shell 消 除语法歧义 如要建一文件叫 jack’s daily 却不能用单引号了 ,此时得用 ”\”应写为: 例 如: touce jack\’s\ daily “\”为转意字符,取消反斜杠后一个字符的特殊含义 文件系统 在 unix 中”.”无特殊含义 unix 下区分文件类型的命令 file unix 下是靠文件的头部说明来区分文件格式,所以操作系统不会理会扩展名的 (exe 文件头两字母是 MZ) mount 直接回车是显示当前所 mount 的状态 df 察看磁盘利用状态 磁盘分区 du –h +子文件名 检测文件系统子目录所占空间 pwd 查看当前子目录 unix 下一个文件可以不可读而可执行,对于子目录而言 x 就是另外一层含义了, 称之为检索。对子目录而言 r 就是列表权 (经验:不要安装基于文本界面的多媒体应用程序) 如何修改权限 修改属主: chown [-R] 新属主 文件 -R: 将文件夹中的所有文件也更改掉 修改属组: charp [-R] 先属组 文件 修改权限: chmod [-R] 新权限 文件 新权限有两种表示方法: (1) 直观: 如 rw-r—r— 数字 6 4 4 110100100 (2)字母法: 如 rw-r--r-u g o 修改文件的访问权限不必非得是 root,文件属主也可以 windows 文件权限策略是 ACL,侧重与灵活性; unix 文件系统策略是权限位, 侧重用效率; linux 所有权限都放于一个 16 位的短整数里 linux 特有功能(ext2 ext3 所体现的) :列出所有权限命令:lsattr 设置特殊权限: chattr 连接: 硬连接: 硬连接本质使一个文件有两个文件名和 windows 不同 windows 中文
Linux内核内存管理:系统内存布局-内核空间和用户空间
Linux内核内存管理:系统内存布局-内核空间和⽤户空间在Linux系统中,每个内存地址都是虚拟的。
它们不直接指向RAM中的任何地址。
每当您访问⼀个内存位置时,都会执⾏⼀种转换机制来匹配相应的物理内存。
让我们从⼀个介绍虚拟内存概念的⼩故事开始。
给定⼀个旅馆,每个房间都可以有⼀个电话,每个电话都有⼀个私⼈号码。
当然,所有安装的电话都是酒店的。
他们都不能从酒店外⾯直接联系上。
如果你需要联系⼀个房间的住户,⽐如说你的朋友,他必须给你酒店的总机号码和他所住的房间号码。
⼀旦你给总机打电话并告诉你需要通话的住户的房间号码,接待员就会把你的电话转接到房间⾥的私⼈电话上。
只有接待员和房间居住者知道私⼈号码映射:(switchboard number + room number) <=> private (real) phone number每当这座城市(或世界上任何地⽅)的某个⼈想要联系住在房间⾥的⼈,他都必须通过热线。
他需要知道正确的酒店热线号码和房间号码。
这样,“总机号码”和“房间号码”就是虚拟地址,“私⼈电话号码”对应的是物理地址。
有⼀些与酒店相关的规则也适⽤于Linux:Hotel Linux您不能联系房间内没有私⼈电话的住户。
甚⾄没有办法尝试这样做。
您的电话将会突然结束您不能访问地址空间中不存在的内存。
这将导致段错误您⽆法联系不存在的住客,或酒店不知道其⼊住,或总机找不到其信息的住客如果您访问未映射的内存,CPU会抛出⼀个页⾯错误,OS会处理它你不能联系已经离开的住客您不能访问已释放的内存。
也许它已经被分配给了另⼀个进程许多酒店可能拥有相同的品牌,但位于不同的地点,每个酒店都有不同的热线电话不同的进程可能有相同的虚拟地址映射到它们的地址空间中,但是指向不同的物理地址有⼀本书(或带有数据库的软件)保存着房间号码和私⼈电话号码之间的映射关系,接待员可以根据需要进⾏咨询虚拟地址通过页表映射到物理内存,页表由操作系统内核维护,并由处理器查询这就是如何想象虚拟地址在Linux系统中⼯作。
Linux笔记(狂神说)
Linux笔记(狂神说)笔记关注狂神公众号1、概述及环境搭建1.11)我们为什么要学习LinuxLinux诞⽣了这么多年,以前还喊着如何能取代windows系统,现在这个⼝号已经⼩多了,任何事物发展都有其局限性都有其天花板。
就如同在国内再搞⼀个社交软件取代腾讯⼀样,想想⽽已基本不可能,因为⽤户已经习惯于使⽤微信交流,不是说技术上实现不了解⽽是⽼百姓已经习惯了,想让他们不⽤,即使他们⾃⼰不⽤亲戚朋友还是要⽤,没有办法的事情。
⽤习惯了windows操作系统,再让⼤家切换到别的操作系统基本上是不可能的事情,改变⼀个⼈已经养成的习惯太难。
没有办法深⼊到普通⽼百姓的⽣活中,并不意味着Linux就没有⽤武之地了。
在服务器端,在开发领域Linux倒是越来越受欢迎,很多程序员都觉得不懂点Linux 都觉得不好意思,Linux在开源社区的地位依然岿然不动。
尤其是作为⼀个后端程序员,是必须要掌握Linux的,因为这都成为了你找⼯作的基础门槛了,所以不得不学习!2)Linux 简介Linux 内核最初只是由芬兰⼈林纳斯·托⽡兹(Linus Torvalds)在赫尔⾟基⼤学上学时出于个⼈爱好⽽编写的。
Linux 是⼀套免费使⽤和⾃由传播的类 Unix 操作系统,是⼀个基于 POSIX(可移植操作系统接⼝)和 UNIX 的多⽤户、多任务、⽀持多线程和多 CPU 的操作系统。
Linux 能运⾏主要的 UNIX ⼯具软件、应⽤程序和⽹络协议。
它⽀持 32 位和 64 位硬件。
Linux 继承了 Unix 以⽹络为核⼼的设计思想,是⼀个性能稳定的多⽤户⽹络操作系统。
3)Linux 发⾏版Linux 的发⾏版说简单点就是将 Linux 内核与应⽤软件做⼀个打包。
⽬前市⾯上较知名的发⾏版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
linux五大子系统
用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为系统调用。
系统调用是Linux内核提供的,用户空间无法直接使用系统调用。
在用户进程使用系统调用必须跨越应用程序和内核的界限。
Linux内核向用户提供了统一的系统调用接口,但是在不同处理器上系统调用的方法各不相同。
Linux内核提供了大量的系统调用,现在从系统调用的基本原理出发探究Linux系统调用的方法。
这是在一个用户进程中通过GNU C库进行的系统调用示意图,系统调用通过同一个入口点传入内核。
以i386体系结构为例,约定使用EAX寄存器标记系统调用。
当加载了系统C库调用的索引和参数时,就会调用0x80软件中断,它将执行system_call 函数,这个函数按照EAX寄存器内容的标示处理所有的系统调用。
经过几个单元测试,会使用EAX寄存器的内容的索引查system_call_table表得到系统调用的入口,然后执行系统调用。
从系统调用返回后,最终执行system_exit,并调用resume_userspace函数返回用户空间。
linux内核系统调用的核心是系统多路分解表。
最终通过EAX寄存器的系统调用标识和索引值从对应的系统调用表中查出对应系统调用的入口地址,然后执行系统调用。
linux系统调用并不单层的调用关系,有的系统调用会由内核进行多次分解,例如socket 调用,所有socket相关的系统调用都与_NR_socketcall系统调用关联在一起,通过另外一个适当的参数获得适当的调用。
进程管理子系统当用户使用系统提供的库函数进行进程编程,用户可以动态地创建进程,进程之间还有等待,互斥等操作,这些操作都是由linux内核来实现的。
linux内核通过进程管理子系统实现了进程有关的操作,在linux系统上,所有的计算工作都是通过进程表现的,进程可以是短期的(执行一个命令),也可以是长期的(一种网络服务)。
Linux管理基础教程_学习笔记
第三章安装软件3.1 RPMRPM(RedHat Package Manager):RPM软件包管理器是一种用于Internet下载包的打包及安装工具,为二进制已编译文件,与之对应的开源代码的格式为SRPM。
RPM命令中,长命令格式--query与缩写命令格式-q相对应。
下面是简单的命令说明:命令行选项--install 安装一个软件包--upgrade 升级或将当前已安装软件更新到最新版本--erase 移出或删除一个已安装软件包--query 查询软件信息--force 强制进行安装。
-h 使用符号“#”指示安装进度,与-v参数同时显示效果更好。
--percent 显示已完成百分比进度。
-nodeps 不进行依赖关系检查--test 测试安装是否能成功完成。
-V 检验系统中的RPM包或文件。
-v(/--verbose,详细的) 通知RPM报告每一步操作的详细信息。
例:rpm -qi bash,显示bash包详细信息rpm -ql bash,列出bash包包含的所有文件rpm -qc bash,列出bash包中配置文件rpm -q --qf “[%{INSTALLTIME:date}% \n]” bash,查找bash包安装至系统中的时间使用RPM安装软件包1)# mount /media/cdrom,插入Fedora光盘,将在CDReadOnlyMeida中的文件挂载至/media/cdrom/中;2)# cd /media/cdrom/Fedora/RPMS/,并#ls joe*确定文件是否在其目录下;3)# rpm –install –verbose –hash –test joe*,测试软件依赖关系;4)# rpm –ivh joe*,安装软件;5)# rpm –q joe,查询命令以确认应用安装至系统中。
删除RPM软件包# rpm –e –vvv joe,删除joe软件包并显示详细信息。
linux系统学习笔记
linux系统学习笔记==============================智能娱乐系统===================硬件:中控:UI,⾳视频数据处理能⼒操作:显卡,声卡、LED、游戏机、触控屏ARM :cortex - A软件:开发环境:vmware + linux(ubuntu)程序开发:linux C程序移植:交叉开发效果:⾃动处理程序⼀、Linux 命令linux : 图形简陋---> 追求效率⾼移植性强,开源性linux :命令⾏形式进⾏交互ls: 查看全部⽂件名/ --->根⽬录pwd: 打印当前的路径/home/gec 等于~ ---> 家⽬录cd : 直接回到/home/geccd / : 回到根⽬录/cd ..: 回到上⼀级的⽬录ls -l类型权限链接数创建者⼯作组⼤⼩⽇期⽬录名d rwxrwxr-x 2 gec gec 4096 Jul 2 2013 Desktop d:⽬录(第⼀个字母:-:普通⽂件d:⽬录)rwxrwxr-x:⽂件的权限r:读权限w:写权限x:执⾏权限⽤户权限:rwx(创建者的权限)rwx(同组⼈)r-x(其他⼈)clear: 清除屏幕信息touch 创建⽂件touch xxxx ----> 因为⾝份是gec,所以必须在/home/gec中创建rm 删除⽂件/⽬录rm xxxx(⽂件名) ----> 因为⾝份是gec,所以必须在/home/gec中删除rm xxxx(⽬录名) -rfgedit 编辑⽂件gedit xxxxcat 查看⽂件内容cat xxxxmkdir 创建⽬录mkdir xxxx ----> 因为⾝份是gec,所以必须在/home/gec中创建cp 拷贝命令cp ⽂件名⽬录名---> cp abc.c 123/chmod 修改⽂件的权限-rw-rw-r-- 1 gec gec 20 Apr 14 19:43 abc.c4214214216 6 4希望三个⼈都是可读可写可执⾏7 7 7chmod 777 xxxxchmod 777 abc.c-rwxrwxrwx 1 gec gec 20 Apr 14 19:43 abc.c⼆、linux与windows间的共享⽬录1,在windows系统中的D:\创建⼀个名字为share的⽬录2, "虚拟机" --- "设置" ---- "选项" --- "共享⽂件夹" --- "总是启⽤" ---"确定" 3,在linux系统输⼊以下命令来进⼊共享⽬录cd /mnt/hgfs/share/4,在linux与windows分别创建⽬录和⽂件,观察两个系统的变化=====================开发板的使⽤=========================⼀、核⼼板CPU:ARM - cortex -A8名字:S5PV210内存:4块4 * 128MB = 512MBnandfalsh: 1G ---〉linux系统⼆、底板电源线插⼝:5V按键⾳频输⼊(红⾊)输出(绿⾊)串⼝:连接PC机与开发板⽹⼝:快速传输数据三、使⽤GEC210板⼦1,接上电源线2,串⼝线⼀端接在开发板上,另⼀端接在USB转串⼝上,USB⼝接在电脑的USB⼝上。
linux 资源 内存使用日志
linux 资源内存使用日志摘要:一、引言二、Linux系统内存使用概述三、Linux内存使用日志的生成与查看四、Linux内存使用日志的分析与优化五、总结正文:一、引言作为一款广泛应用于服务器和嵌入式系统的操作系统,Linux在实际运行过程中,内存使用情况对于系统性能的影响至关重要。
为了更好地监控和调整内存使用情况,Linux系统提供了内存使用日志功能。
本文将详细介绍Linux 内存使用日志的相关知识。
二、Linux系统内存使用概述1.Linux内存管理的基本概念Linux内存管理主要包括物理内存、虚拟内存、内核缓冲区和用户缓冲区等。
物理内存是实际存在的内存资源,虚拟内存则是物理内存的扩展,内核缓冲区和用户缓冲区则是为了提高内存使用效率而设置的缓存区域。
2.Linux内存使用的主要组件Linux内存使用的主要组件包括进程、内核、内存分配器等。
进程是内存使用的实际主体,内核则是内存分配和回收的主要管理者,内存分配器则负责在物理内存和虚拟内存之间进行高效的内存分配和回收。
三、Linux内存使用日志的生成与查看1.内存使用日志的生成Linux内存使用日志主要由内核生成,包括内存分配、回收、页表管理等信息。
日志文件名为“/var/log/messages”,可以通过查看该文件来获取内存使用日志。
2.内存使用日志的查看除了直接查看“/var/log/messages”文件外,还可以使用一些日志查看工具,如“less”、“grep”等命令,对内存使用日志进行筛选和查看。
四、Linux内存使用日志的分析与优化1.分析内存使用日志通过分析内存使用日志,可以了解到系统的内存使用状况,如内存分配是否充足、内存回收是否及时等。
还可以通过比较不同时间段的内存使用情况,找出潜在的内存泄漏问题。
2.优化内存使用根据内存使用日志的分析结果,可以采取相应的优化措施,如调整内核参数、优化进程内存使用等,以提高系统性能。
五、总结本文详细介绍了Linux内存使用日志的生成、查看、分析与优化等方面的知识。
linux 资源 内存使用日志
linux 资源内存使用日志摘要:1.Linux 内存管理概述2.Linux 内存资源分配策略3.Linux 内存使用日志的作用和重要性4.如何查看和分析Linux 内存使用日志5.优化Linux 内存使用的建议正文:1.Linux 内存管理概述Linux 操作系统的内存管理是一个关键的组件,负责管理物理内存的分配和释放。
Linux 内存管理器采用分页机制,将物理内存划分为固定大小的页面,这些页面可以被分配给进程。
每个页面都有一个唯一的标识符,称为页表项,页表项包含有关页面使用情况和映射信息的详细信息。
2.Linux 内存资源分配策略Linux 内存分配策略的目标是尽可能高效地利用内存。
当应用程序请求内存时,Linux 首先会在内存中查找可用的页面。
如果找不到足够的空闲页面,Linux 会尝试释放一些页面,以便为新的请求腾出空间。
这种策略可以确保内存资源得到充分利用,同时保证系统的稳定性。
3.Linux 内存使用日志的作用和重要性Linux 内存使用日志记录了系统中内存的使用情况,包括内存的分配和释放。
这些日志对于诊断内存泄漏、识别内存使用不当的程序以及优化内存资源管理具有重要意义。
通过分析内存使用日志,系统管理员可以发现潜在的问题并采取相应的措施。
4.如何查看和分析Linux 内存使用日志Linux内存使用日志通常存储在/proc/meminfo和/proc/slabinfo文件中。
要查看这些文件,可以使用cat命令或者查看内存使用情况的工具,如free和/usr/bin/vmstat。
分析这些日志需要对Linux内存管理和分配策略有一定了解,以便正确地解读日志内容。
5.优化Linux 内存使用的建议为了优化Linux 内存使用,可以采取以下措施:- 定期监控内存使用情况,以便及时发现潜在的内存泄漏问题。
- 调整内存分配参数,如/proc/sys/vm/swappiness,以优化内存使用和交换空间分配。
linux 资源 内存使用日志
linux 资源内存使用日志摘要:1.Linux 内存管理概述2.Linux 内存资源分配策略3.Linux 内存使用日志的作用和重要性4.如何查看和分析Linux 内存使用日志5.优化Linux 内存使用的建议正文:1.Linux 内存管理概述Linux 操作系统的内存管理是一个关键的组件,负责管理物理内存的分配和释放。
Linux 内存管理器采用分页机制,将物理内存划分为固定大小的页面,这些页面可以被分配给进程。
每个页面都有一个唯一的标识符,称为页表项,页表项包含有关页面使用情况和映射信息的详细信息。
2.Linux 内存资源分配策略Linux 内存分配策略的目标是尽可能高效地利用内存。
当应用程序请求内存时,Linux 首先会在内存中查找可用的页面。
如果找不到足够的空闲页面,Linux 会尝试释放一些页面,以便为新的请求腾出空间。
这种策略可以确保内存资源得到充分利用,同时保证系统的稳定性。
3.Linux 内存使用日志的作用和重要性Linux 内存使用日志记录了系统中内存的使用情况,包括内存的分配和释放。
这些日志对于诊断内存泄漏、识别内存使用不当的程序以及优化内存资源管理具有重要意义。
通过分析内存使用日志,系统管理员可以发现潜在的问题并采取相应的措施。
4.如何查看和分析Linux 内存使用日志Linux内存使用日志通常存储在/proc/meminfo和/proc/slabinfo文件中。
要查看这些文件,可以使用cat命令或者查看内存使用情况的工具,如free和/usr/bin/vmstat。
分析这些日志需要对Linux内存管理和分配策略有一定了解,以便正确地解读日志内容。
5.优化Linux 内存使用的建议为了优化Linux 内存使用,可以采取以下措施:- 定期监控内存使用情况,以便及时发现潜在的内存泄漏问题。
- 调整内存分配参数,如/proc/sys/vm/swappiness,以优化内存使用和交换空间分配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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+逻辑地址的偏移部分(注意!!)(段与段可能会重叠)按段式管理能访问2的32次方共4GB 的空间(2的16次方个段,每个段可以为2的16次方byte的大小),但是只有20位地址总线,因此只能访问1M的内存。
1.2、32位CPU:1)实模式:与16位时是一样的段寄存器的值×16就是段地址2)保护模式:段寄存器的值是一个选择器,间接指出一个32位的段地址段基地址长达32位,每个段的最大容量可达4G,段寄存器的值是段地址的“选择器”(segment selector),用该“选择器”从内存(segment descriptor)中得到一个32位的段地址,存储单元的线性地址就是段地址加上段内偏移量,这与32位CPU的物理地址的计算方式完全不同。
!!!线性地址=段基地址+段内偏移量/逻辑地址(段选择器指向的内存中存储的基地址+段偏移寄存器)!!! 这里不用乘以16或者32,因为段基址寄存器可以完全存下段地址。
32位CPU得到线性地址后,再经过页式管理就能得到物理地址二、页式管理2.1页:线性地址被分为固定长度的组,称为页。
例如32位的机器,每页4KB,可划为2的20次方个页(划分虚拟单元),32位机器的线性地址空间为4G。
2.2物理页:也称为页框、页桢;分页单元把所有的物理内存也划分为固定长度的管理单位(划分实在的单元),它的长度一般与线性地址页是相同的。
二者的区别:页划分的是线性地址,物理页划分的是实际的物理地址二者的联系:1、页的长度一般相同,2、通过mapping转换,存在映射关系。
通过分页管理模型,由线性地址得到物理地址1、分页单元中,页目录的地址存放在CPU的cr3寄存器中,是进行地址转换的开始点。
2、每个进程,都有其独立的虚拟地址空间,运行一个进程,首先要将它的页目录地址放到cr3寄存器中,将其他进程的页目录地址保存下来。
3、每个32位的线性地址被划分为三部分:页目录索引(10位);页表索引(10位);偏移(12位)(mapping映射关系由下图反映)上图中页的大小为2的12次方,即4K。
两级分页模型(页不算在内)******************************!!以上都是x86模式!!*********** *******************Linux内存管理Linux有限度地使用了Intel的段式管理机制,而完全采用了页式管理机制。
(也可以说没有采用段式管理)所有段的基地址全部为零(那么所有段都重合,相当于只有一个段)又因为"线性地址=段基地址+段内偏移量/逻辑地址偏移部分",所以"线性地址=逻辑地址"。
在linux系统中,逻辑地址=线性地址=虚拟地址物理地址<——>线性地址(mapping转换)linux页式管理linux2.6.29内核采用了四级页式管理架构,来兼容二级、三级管理架构的CPU。
页全局目录、页上级目录、页中间目录、页表(四级时,线性地址为64位)4-4-2进程地址空间(参考课件)linux操作系统采用虚拟内存管理技术,使得每个进程的地址空间都是独立的。
该空间大小是3G,用户看到的都是虚拟地址,无法看到实际的物理地址。
虚拟内存管理的优点:1、保护操作系统,2、用户程序可以使用比实际物理内存更大的地址空间。
linux将4G的虚拟地址空间划分为用户空间和内核空间。
用户空间:0~0xbfffffff(0~3G):用户进程通常情况下只能访问用户空间。
内核空间:0xc0000000~0xffffffff(3G-4G)用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。
每个进程的地址空间都是独立的。
每个进程的页目录、页表不一样,因此通过页式转换就可以得到不同的物理地址。
例如:同一个用户程序运行多次,产生多个进程,每个进程访问的虚拟地址(逻辑地址、线性地址)都是一样的,但是每个进程都有一套独立的页目录、页表,因此得到的实际物理地址是不同的。
每个进程的页目录和页表就可以理解为进程独立的用户空间。
Fork(),execve(),malloc()等进程相关操作分配的内存,都是虚拟地址。
只有当进程去访问新获取的虚拟地址时,才会由“请页机制”去分配实际的物理地址。
实际的物理内存只有当进程真的去访问新获取的虚拟地址时,才会由“请页机制”产生“缺页”异常,从而进入分配实际页框的程序。
该异常是虚拟内存机制赖以生存的基本保证——它会告诉内核去为进程分配物理页,并建立对应的页表,这之后虚拟地址才实实在在地映射到了物理地址上。
动态分配——Linux内核中,动态分配内存使用函数kmalloc()头文件:#include<linux/slab.h>原型:void *kmalloc(size_t size,int flags) ——kfree,适用于分配小于128KB的内存功能:分配实际的物理页框,虽然返回的是虚拟地址,但已经有对应的物理页了。
参数:Flags取值为:1、GFP_KERNEL,分配实际的内存,分配不到时睡眠。
返回虚拟地址,但对应有实际的物理单元。
(16M-896M)2、GFP_ATOMIC,用来在进程上下文之外的代码(包括中断处理)中分配内存,从不睡眠。
3、__GFP_DMA,要求分配能够DMA的内存(物理地址在16M以下的页桢)4、__GFP_HIGHMEM,分配的内存位于高端内存。
(896M以上)当用完这些页,需要使用下列函数之一来释放它们:◎kfree函数◎get_zeroed_page(unsigned int flags)——free_page返回指向新页面的指针,并将页面清零。
◎__get_free_page(unsigned int flags)——free_page和get_ zeroed _page类似,但不清零页面。
◎__get_free_pages(unsigned int flags,unsigned int order)——free_pages分配若干的连续的页面,返回指向该内存区域的指针,但也不清零这段内存区域。
当用完这些页,需要使用下列函数之一来释放它们:◎void free_page(unsigned long addr)◎void free_pages(unsigned long addr,unsigned long order)如果释放的页面和先前分配的页面数目不等,会导致系统错误。
4-4-3内核地址空间(参考课件)内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。
内核映射的这一套页目录、页表是固定不变的。
内核空间:3G-4G。
高端内存:物理内存896M以上的内存。
1、直接内存映射区:线性地址=3G+物理地址。
从3G开始,最大896M的线性地址区间,我们称作直接内存映射区,这是因为该区域的线性地址和物理地址之间存在线性转换关系。
2、动态内存映射区:最小120M。
由内核函数vmalloc()来分配。
线性空间连续,物理空间不一定连续。
分配一段虚拟地址,仅仅是一个地址,并不对应实际的物理地址。
分配的虚拟地址在动态内存映射区,但可能处于低端内存,也可能处于高端内存(因为直接映射区最大为896M)。
3、永久内存映射区:4M。
(PKMAP)896M以上的高端内存,可以使用该区域来访问。
访问方法:1)使用alloc_page(__GFP_HIGHMEM)分配高端内存页(得到物理页)2)使用kmap函数将分配到的高端内存映射到该区域。
(得到线性地址)4、固定内存映射区:4M。
每个地址项都服务于特定的用途,如ACPI_BASE等。
映射关系做好了,不能改变。
4-4-4内核链表(参考课件)链表数据结构:一般包含两个域:数据域和指针域。
链表数据结构的定义:struct list_head{struct list_head *next,*prev;}内核链表具备双链表功能,通常它都组织成双向循环链表,在[include/linux/list.h]中。
传统链表和linux链表的比较:1、传统链表:单向链表,指针指向下一节点,指针为下一节点数据类型的指针。
缺点,节点类型变化,则指针类型也要变化,不通用。
2、linux链表:双向循环链表,指针类型固定为struct list_head,链表头也为struct list_head类型,但是不含数据。