linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)

第一次写读书笔记,有什么套路呢?还没来得及去学习。《linux kernel的设计与实现》真的是一本好书,里面的东西解答了很多工作中的疑问。如显示地调用schedule()进行调度,系统调用__syscalln(),一些数据结构函数经常在kernel 协议栈中遇到,中断注册和中断上下文,软中断,tasklet,锁,定时器,内存管理slab...

第15章 进程地址空间

进程只能访问有效内存区域内的内存地址。每个内存区域也具有相关权限如对相关进程有可读、可写、可执行属性。如果一个进程访问了不在有效范围中的内存区域,或以不正确的方式访问来有有效地址,那么内核就会终止该进程,并返回“Segmentation Fault”这个经典的错误。内存区域包含内存对象如:

-可执行文件代码的内存映射,称为代码段(text section);

-可执行文件的已初始化全局变量的内存映射,称为数据段(data section);

-包含未初始化全局变量,也就是bss段的零页(页面中的信息全部为0值,所以可用于映射bss段等目的)的内存映射;(bss段,因为未初始化的变量没有对应的值,所以并不需要存放在可执行对象中,但是C标准强制规定未初始化的全局变量要被赋予特殊的默认值,所以内核要将变量(未被赋值的)从可执行代码载入内存中,然后将零页映射到该片内存上,于是这些未初始化变量就被赋予了0值,这样做避免了在目标文件中显示地进行初始化,减少了空间浪费)。

-用于进程用户空间栈的零页的内存映射;

-每一个诸如C库或动态连接程序等共享库的代码段、数据段和bss段也会被载入进程的地址空间。

内核使用内存描述符结构体表示进程的地址空间,该结构包含了和进程地址空间有关的全部信息。内存描述符由mm_struct结构体表示,定义在文件中,所有的mm_struct结构体通过自身的mmlist域连接中一个双向链表中,该链表的首元素是init_mm内存描述符,代表init进程的地址空间。

内存区域(VMA)由vm_area_struct结构体描述,包含相关的mm_struct结构体域。进程的地址空间通过mmap和mm_rb(红-黑树)描述包含的全部内存区域。

可以使用/proc文件系统和pmap(1)工具查看给定进程的内存空间和其中包含的内存区域。

mmap()和do_mmap()创建进程的地址空间。内核使用do_mmap(),用户空间使用mmap()。

当用程序访问一个虚拟地址时,必须将虚拟地址转化为物理地址,地址的转换通过页表才能完成。Linux中使用三级页表转换地址。

未完待续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中正确使用PRId64

nt64_t用来表示64位整数,在32位系统中是long long int,在64位系统中是long int,所以打印int64_t的格式化方法是: [cpp] view plaincopy printf("%ld", value); // 64bit OS printf("%lld", value); // 32bi…

大话细说ORM -----(转)

什么是ORM? ORM,即对象关系映射(Object Relational Mapping)表示一种技术,用来把(对象模型)表示的对象映射到基于SQL的(关系模型)数据结构中去。 说得通俗点,就是在对象的属性与关系…

linux中权限的名词解释,Linux的基本权限和特殊权限

基本权限的类别访问方式(权限):-读写:允许查看内容-read r-写入:允许修改内容-write w-可执行:允许运行和切换-execute x对于文本文件:r:cat head tail lessw:vimx&#xff1a…

乱写

想写点东西,又不知道从何下笔。可是心情又觉得有些许不爽,那就漫无思绪想到哪写哪吧。 昨天加了一个HR的QQ,发了一封简历过去,她说她打开我的简历电脑就蓝屏了(无语),这管不着我简历的事吧。然后…

容器set和multiset

一、set和multiset基础 set和multiset会根据特定的排序准则&#xff0c;自动将元素进行排序。不同的是后者允许元素重复而前者不允许。 需要包含头文件&#xff1a; #include <set> set和multiset都是定义在std空间里的类模板&#xff1a; [cpp] view plaincopyprint? t…

linux centos命令语法,linux-centos7

# :-: linux常用的相关查询命令### **1.查看linux用户命令**cat /etc/passwd### **2.查看cpu,mem**grep "model name" /proc/cpuinfo 查看cpu核数cat /proc/cpuinfo 查看cpu详细信息grep MemTotal /proc/meminfo 查看内存总大小以及剩余大小…

oracle rac理解和用途扩展

Oracle RAC的优势在于利用多个节点&#xff08;数据库实例&#xff09;组成一个数据库&#xff0c;这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能&#xff0c;而且可以通过增加节点进行性能的扩展。实现Oracle RAC需要解决的关键问题就是多节点进行数据访问…

std::set作为一个有序集合

摘要&#xff1a;std::set作为标准库的一个关联容器&#xff0c;实现内部元素进行了排序&#xff0c;使用这特性可以对一组元素进行插入排序。std::set最初的设计是完成数学中“集合”的概念&#xff0c;它提供的接口也是如此。本文简单地介绍一下这一个标准库容器。 为了使用s…

linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)

定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息。通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到&#xff0c;如果是主动与别的机器建立的连接信息则可以通过 lsof 命令来获得。例如我想要查看进程 frps 当前的所有连接信息&#xff0c…

SQLite多线程使用总结

SQLite支持3种线程模式&#xff1a;单线程&#xff1a;这种模式下&#xff0c;没有进行互斥&#xff0c;多线程使用不安全。禁用所有的mutex锁&#xff0c;并发使用时会出错。当SQLite编译时加了SQLITE_THREADSAFE0参数&#xff0c;或者在初始化SQLite前调用sqlite3_config(SQL…

linux rom打包工具,Android rom解包打包工具

eMMC主要是针对手机和平板电脑等产品的内嵌式存储器&#xff0c;由于其在封装中集成了一个控制器&#xff0c;且提供标准接口并管理闪存等优势&#xff0c;越来越受到Android手机厂商的青睐&#xff0c;以eMMC为存储设备的android手机&#xff0c;其文件系统(system、data分区)…

winform(C#)透明方法

1.设置窗体opacity属性&#xff1a; 2.窗体的BackColor和TransparencyKey属性设置相同的值&#xff1a; 2.加using System.Runtime.InteropServices;引用然后加上以下代码&#xff1a; [StructLayout(LayoutKind.Sequential)]public struct MARGINS{public int Left;public int…

ssh免密码登陆

1. 先去掉root登陆密码 passwd -d root 或者修改/etc/shadow 文件&#xff0c;将root那行&#xff0c;前两个冒号之间的加密过的密码去掉 2. 修改sshd_config文件 PermitEmptyPasswords yes

linux彻底卸载xfce,Ubuntu12.04LTS下如何安装和彻底卸载xfce4?

今天将Ubuntu12.04更新完了&#xff0c;用的网易的源&#xff0c;更新速度还是很给力的&#xff0c;平均500多K的下载速度。发现虚拟机上unity界面还是比较卡的&#xff0c;想换成gnome3.6试一下&#xff0c;结果rangerlee说xfce和lxde桌面很清爽&#xff0c;并且轻量占用内存少…

分布式缓存应用(转载的)

前言 Asp.Net中使用Couchbase——Memcached缓存入门篇 见http://www.cnblogs.com/aehyok/p/3436721.html 主要讲解Couchbase服务端的安装配置和客户端的引用调用&#xff0c;然后通过一个零配置的代码来完成最简单的代码实现调用。那么本次课先通过简单的配置文件进行配置&…

详细解析Linux /etc/passwd文件

在Linux /etc/passwd文件中每个用户都有一个对应的记录行&#xff0c;它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。这个文件对所有用户都是可读的。但是Linux /etc/passwd文件中都有些什么内容呢&#xff1f; 它的内容类似下…

linux eclipse 头文件路径,Eclipse CDT标准库头文件设置

使用eclipse cdt开发C/C项目的时候&#xff0c;从eclipse官网下的linux下的专门版本在Fedora上能自动Discovery机器上的gcc/g头文件、符号之类的&#xff0c;但是在我用的slackware下却不行&#xff0c;需要手动添加标准库头文件路径/usr/include、/usr/local/include……&…

Jquery通过遍历数组给checkbox赋默认值

需求&#xff1a;有一个数组&#xff1a;(北京菜&#xff0c;粤菜)&#xff0c;checkbox如下&#xff1a; 现在想通过遍历这个数组&#xff0c;使数组里包含的值&#xff0c;在checkbox选中 代码&#xff1a; var flavors new Array([北京菜 , 粤菜]); $.each(flavors,functio…

/etc/fstab和/etc/mtab的区别!

etc/fstab文件的作用 记录了计算机上硬盘分区的相关信息&#xff0c;启动 Linux 的时候&#xff0c;检查分区的 fsck 命令&#xff0c;和挂载分区的 mount 命令&#xff0c;都需要 fstab 中的信息&#xff0c;来正确的检查和挂载硬盘。 /etc/mtab文件的作用&#xff1a;先看它的…

linux链接 .o,Linux 链接概念 - osc_8ieji7o1的个人空间 - OSCHINA - 中文开源技术交流社区...

1.Linux 链接概念Linux 链接分两种&#xff0c; 一种被称作硬链接(Hard Link)&#xff0c;另一种被称为符号链接(Symbolic Link).默认情况下&#xff0c;ln 命令产生硬链接。硬连接硬链接指通过索引节点来进行连接。再Linux的文件系统中&#xff0c;保存在磁盘分区中的文件不管…