Linux学习之旅
文章平均质量分 80
芯片业者柏承双
加油加油加油
展开
-
第九学 linux内核——内存寻址——分页机制(1)
先前我们介绍段机制的时候说到,x86的段机制把程序的逻辑地址转换成线性地址,这里要讲的分页机制是把线性地址映射成物理地址,也就说说,x86其实是用了两套机制把逻辑地址转换成物理地址的。我们也提到linux内核是怎样绕过段机制从而让x86的分段机制看起来不起作用的,我们还说到这样的处理造成了段的数据保护的问题。下来我们就来讨论x86的分页机制。我们的思路依然是先介绍x86的分页机制,然后再讨论lin原创 2013-05-11 12:35:19 · 1690 阅读 · 0 评论 -
第十二学 linux内核——进程管理——进程控制块的内容(1)
我们在介绍list.h文件时说道,linux是把所有的进程组织成双向链表来管理的,这个双向链表中的每个节点就是一个叫task_struct的数据结构,这个数据结构被叫做进程控制块(PCB),也叫进程描述符。该结构定义在文件中。进程控制块中包含一个具体进程的所有信息,它大概包含以下信息:struct task_struct { /* * 1> 状态信息——描述进程的动态变化,如就绪态、等待原创 2013-06-04 09:14:35 · 1877 阅读 · 0 评论 -
第十三学 linux内核——进程管理——进程控制块的内容(2)
上节我们总体概括了进程控制块中的内容,下来我们会慢慢的剖析里边的各个域。 这节我们介绍进程控制块中关于进程状态的定义。 linux内核中用一个长整型来标识一个进程的状态,中是这样定义的(3.9版本内核):struct task_struct { // 1> 状态信息——描述进程的动态变化,如就绪态、等待态、僵死态等。 volatile long原创 2013-06-05 09:34:39 · 1526 阅读 · 0 评论 -
第十一学 linux内核——进程管理——进程是什么
我们前面提到过linux内核的几个子系统,他们分别是进程管理、虚拟文件系统(文件管理)、内存管理和网络接口管理(本来应该还有设备管理的,但是linux是以文件的方式管理硬件设备的,所以把它归为文件管理里边)。对于现代操作系统来说,进程是一个核心概念,它也是我们理解操作系统内核必须首先掌握的一个概念。所以,这节我们首先介绍进程的概念。 我们从我们所熟悉的操作系统的操作开始:我们可以原创 2013-06-03 12:19:33 · 1657 阅读 · 0 评论 -
第三学 linux内核中最基本的数据组织方式——list.h分析(1)
如果说内核态helloworid是我们进入linux内核世界的第一步,那么双链表操作算是我们学习linux内核数据组织方式的敲门砖。 在这里,我们首先要搞清一个概念,我们为什么要用链表来组织数据? 这我们可以从我们如何操作链表和存储链表这个角度来理解:链表操作无外乎插入节点、删除节点、查找节点、遍历节点等等等等,而它的存储并不像我们的数组一样占据一段连续的存储空间,它原创 2013-05-06 21:22:44 · 870 阅读 · 0 评论 -
第五学 linux内核中最基本的数据组织方式——list.h分析(3)
这节给出一个内核态的使用双链表的例子,在我们写内核态helloworld的时候就说过,它是我们编写内核模块的模板,这里你可以再加深一下这个概念的理解。用的都是以上边介绍过的一些函数,嘿嘿,看起来也并不是很难的样子。#include原创 2013-05-08 10:41:58 · 777 阅读 · 0 评论 -
第一学 Linux下的软件安装
因为我事先接触过一些Linux下的命令,所以这里不再从命令开始起。 和windows下一样,你想要安装一个软件必须得下载到它的安装包,这里假设我们已经下载到自己的安装包,那我们首先使用相应的命令把它解压到临时目录。注意,linux下的安装包通常是诸如-——*.tar/*.tar.gz/*.tar.bz2——一类的源代码压缩包。解压这些安装包的命令如下:对于*.tar文件:原创 2013-05-03 08:36:31 · 939 阅读 · 1 评论 -
第四学 linux内核中最基本的数据组织方式——list.h分析(2)
7、遍历节点操作 这节我们介绍双连表的遍历。遍历是一个非常重要的概念,学过STL的童鞋们都知道,C++的容器的大量的算法都是建立在遍历这个概念基础之上的,比如查找元素,元素排序,等等。我只想说遍历很重要,相当重要,非常重要。废话有点多,我们直接看源码。 linux内核中定义了两个最基本的宏来遍历一个双连表,并且获取链表中某个节点的指针。以下是两个非常重要的基本宏原创 2013-05-07 11:29:12 · 769 阅读 · 0 评论 -
第二学 内核态helloworld
helloworld程序几乎成了我们学习任何一门软件编程语言首先要学会的程序,它教会了数以万计的程序员编写各种各样的应用程序,这里我们仍然用这个程序来踏入我们学习linux内核的第一步。1、在这里我们要准备两个文件hello.c和Makefilehello.c文件 #include #include MODULE_LICENSE("GPL"); s原创 2013-05-03 17:40:38 · 1139 阅读 · 0 评论 -
第八学 linux内核——内存寻址——段机制(2)
这节我们讨论linux是如何利用x86结构中的段机制的,更确切的说是如何绕过linux的段机制的。 我们决定从linux的可移植性开始讨论。我们说linux是一个广泛移植的操作移动,它支持x86,Alpha,arm等多种体系结构。但是很多的结构其实都是不支持段机制的,比如arm,Alpha等,但是他们都支持分页机制。linux为了能移植到x86上,做了不少工作。原创 2013-05-10 18:02:10 · 1714 阅读 · 0 评论 -
第七学 linux内核——内存寻址——段机制(1)
x86的段机制是实现程序的逻辑地址到线性地址的映射的一种机制。 我们先介绍实现这个机制的几个组成部件,它包括一些软件的东西和一些硬件的东西:硬件的东西有:段寄存器、分段部件、段描述符高速缓冲器;软件的东西有(即几个数据结构):段描述符表、段描述符;另外得知道的两个概念前面已经介绍过了:逻辑地址和线性地址。 下面我们看段机制是怎么用这些概念实现的。 由原创 2013-05-10 15:35:18 · 1141 阅读 · 0 评论 -
第六学 linux内核——内存寻址——简介
操作系统首先是一组软件,这是大家必须首先要搞清的问题。那么这是什么样的一组软件呢?它是沟通用户和硬件的一组软件。那么作为操作系统的设计者,它能不能只关心软件的实现呢,由操作系统作为用户和硬件的媒介这点来说,显然不行。于是我们说,操作系统是一组充分挖掘了硬件设计机制的软件,即我们依赖一个体系结构来设计我们的操作系统。这样就有了一个问题,若我们整个操作系统都依赖某一体系结构来设计的话,它的硬件潜能却是原创 2013-05-08 21:10:37 · 803 阅读 · 0 评论 -
第十学 linux内核——内存寻址——分页机制(2)
前面我们提到linux是如何把程序的逻辑地址通过摒弃段机制直接映射到线性地址空间,这节我们讨论linux如何实现线性地址到物理地址的映射。 我们强调过linux如何致力于做出一个强大的可移植系统。linux为了可移植,采用了三级分页模式,以支持一些64位机。于是linux定义了以下三种类型的页表: 页总目录(PGD)、页中间目录(PMD)、页表(PT)。linu原创 2013-05-17 10:19:47 · 1191 阅读 · 0 评论 -
第十四学 linux内核——进程管理——进程控制块的内容(3)
这节讲进程控制块中的标识进程之间亲属关系的那些域。 系统创建的进程具有父子关系。所有的进程都是PID为1的init进程的后代(ps -e命令可以看到系统中进程相关的一些信息)。内核在系统启动的最后阶段启动init进程,该进程读取系统的初始化脚本并执行其他的相关程序,最终完成系统启动的整个过程。随后所有创建的进程都是从该进程中创建的子进程。系统中每个进程必有一个子进程,相应的,每个进原创 2013-06-06 17:33:13 · 1339 阅读 · 0 评论