打印

[原创] 【Linux 学习笔记 2】有关LBA 和 /Proc

【Linux 学习笔记 2】有关LBA 和 /Proc

Linux 学习笔记 2】有关LBA 和 /Proc

说句实话,偶虽然没有学习LINUX很久,但是感觉学习Linux的最大的问题就是繁杂,没有什么正统的培训。即使有了培训资料,你安装的软件和你书籍上的软件也有不少冲突。导致了许多的学习中的问题。我昨天翻看LPI-1的outline。发现里面的内容的深度可以达到相当的一个复杂的程度。网上有人说,只要看IBM的培训资料就可以考过LPI-101。我也下了一份IBM资料,虽然是中文版本的,但是我对其非常简单精炼的文字表示惊讶。这个东西只能作为考前的冲刺,或者复习的guideline。做复习资料,恐怕是不够看的。于是我决定在以Lpi的outline为前提下,对自己不了解的资料进行补充和扩充。如果说的不对的地方,欢迎大家讨论。

[quote]1.101.1 基本BIOS配置
说明:考生应能够通过正确设置BIOS来配置基本的系统硬件.这个目标包括能够理解BIOS配置中的术语,比如在超过1024柱面的IDE硬盘上使用的"LBA模式";会激活或者禁止集成的外设;会打开或者关闭象键盘这样的外部设备;能正确的设置由BIOS管理的IRQ,DMA和I/O地址以及错误句柄(error handling).
-------------------------------------------
比如在超过1024柱面的IDE硬盘上使用的"LBA模式"

NORMAL 普通模式是最早的 IDE 方式,在硬盘访问时,BIOS 和 IDE 控制器对参数不做任何转换。该模式支持的最大柱面数为1024,最大磁头数为 16,最大扇区数为 63,每扇区字节数为512,因此支持最大硬盘的容量为:512x63x16x1024=528MB。在此模式下,硬盘的实际物理容量再大,也只能用到其中的 528M。
LBA(Logical Block Addressing)逻辑块寻址模式。管理的硬盘空间可达 8.4GB。在 LBA模式下,设置的柱面、磁头、扇区等参数并不是实际硬盘的物理参数。在访问硬盘时,由 IDE控制器把由柱面、磁头、扇区等参数确定的逻辑地址转换为实际硬盘的物理地址。在 LBA 模式下,可设置的最大磁头数为255,其余参数与普通模式相同,由此可以计算出可访问的硬盘容量为:512x63x255x1025=8.4GB。不过现在新主板的 BIOS 对INT13 进行了扩展,使得 LBA 能支持 100GB 以上的硬盘。
LARGE 大硬盘模式,在硬盘的柱面超过 1024 而又不为 LBA 支持时采用。LARGE 模式采用的方法是把柱面数除以 2,把磁头数乘以 2,其结果总容量不变。
在这三种硬盘模式中,现在 LBA 模式使用最多。
-------------------------------------------

关键文件,术语和工具包括:
/proc/ioports
/proc/interrupts
/proc/dma
/proc/pci

----------------------------------------------------
这里的知识点就比较tricky。首先我们要知道什么是/proc才行。我从网上找了点资料,并在一些地方进行了加注。



Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的 Linux 系统的 /proc 文件系统的基本概念都是相同的,但本文只讨论基于 intel x86 架构的 Linux /proc 文件系统。

/proc --- 一个虚拟文件系统 /proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件 /proc/mounts (和 mount 命令一样列出所有已经加载的文件系统),你会看到其中 一行是这样的:

grep proc /proc/mounts
/proc /proc proc rw 0 0

****************************
grep的目的是从file里面找到相应字段,所以,上面的实验在mounts文件里面,找出了proc的字段
但是要注意的是,这里的/proc/mounts并不是一个文件。它是一个连接。是指向/proc/self/mounts
那里才是文件mounts的所在位置。它的字节依然是0. mounts本来就是用来加载文件的系统
××××××××××××××××××××××××××××
/proc 由内核控制,没有承载 /proc 的设备。因为 /proc 主要存放由内核控制的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对 /proc 进行一次 'ls -l' 可以看到大部分文件都是 0 字节大的;不过察看这些文件的时候,确实可以看到一些信息。这怎么可能?这是因为 /proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层 (VFS) 了。然而,直到当 VFS 调用它,请求文件、目录的 i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录。
加载 proc 文件系统如果系统中还没有加载 proc 文件系统,可以通过如下命令加载 proc 文件系统:

mount -t proc proc /proc
上述命令将成功加载你的 proc 文件系统。更多细节请阅读 mount 命令的 man page。察看 /proc 的文件/proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。大部分 /proc 中的文件和目录提供系统物理环境最新的信息。尽管/proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more', 'less'或'cat'这样的程序来查看。当编辑程序试图打开一个虚拟文件时,这个文件就通过内核中的信息被凭空地 (on the fly) 创建了。这是一些我从我的系统中得到的一些有趣结果:
$ ls -l /proc/cpuinfo
-r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo
××××××××××××××××××××××××××××××××××××××××××××××
ls是list命令。在这里,第一行是属性,第二行是链接的数目,Owner和group owner, 0是文件的大小。因为这个文件是虚拟的,所以是0.后门是日期和文件名。
××××××××××××××××××××××××××××××××××××××××××××××

$ file /proc/cpuinfo
/proc/cpuinfo: empty

××××××××××××××××××××××××××××××××××××××××××××××
file命令是用来查看文件资料的。因为不是Physical文件,所以,资料为空。
××××××××××××××××××××××××××××××××××××××××××××××

$ cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 1000.119
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips : 1998.85

processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 1000.119
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips : 1992.29


这是一个从双 CPU 的系统中得到的结果,上述大部分的信息十分清楚地给出了这个系
统的有用的硬件信息。有些 /proc 的文件是经过编码的,不同的工具可以被用来解释
这些编码过的信息并输出成可读的形式。这样的工具包括:'top', 'ps', 'apm' 等。



得到有用的系统/内核信息
proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:
  • /proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)
  • /proc/meminfo - 物理内存、交换空间等的信息
  • /proc/mounts - 已加载的文件系统的列表
  • /proc/devices - 可用设备的列表
  • /proc/filesystems - 被支持的文件系统
  • /proc/modules - 已加载的模块
  • /proc/version - 内核版本
  • /proc/cmdline - 系统启动时输入的内核命令行参数
proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对 /proc 的每一个文件都'more'一下或读参考文献[1]获取更多的有关 /proc 目录中的文件的信息。我建议使用'more'而不是'cat',除非你知道这个文件很小,因为有些文件 (比如 kcore) 可能会非常长。
有关运行中的进程的信息/proc 文件系统可以用于获取运行中的进程的信息。在 /proc中有一些编号的子目录。每个编号的目录对应一个进程 id (PID)。这样,每一个运行中的进程 /proc 中都有一个用它的 PID命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。让我们试着查找一个运行中的进程。
$ ps -aef | grep mozilla
root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla
上述命令显示有一个正在运行的 mozilla 进程的 PID 是 32558。相对应的,/proc 中应该有一个名叫 32558 的目录
××××××××××××××××××××××××××××××××××××××××××××××××××××
上面这个command通过Ps来活得所有进程信息。然后用管道符输入到grep这里。通过grep命令,来获得含有mozilla的进程信息。PS命令的详解如下:
ps
1.作用
ps显示瞬间进程 (process) 的动态,使用权限是所有使用者。
2.格式
ps [options] [--help]
3.主要参数
ps的参数非常多, 此出仅列出几个常用的参数。
-A:列出所有的进程。
-l:显示长列表。
-m:显示内存信息。
-w:显示加宽可以显示较多的信息。
-e:显示所有进程。
a:显示终端上的所有进程,包括其它用户的进程。
-au:显示较详细的信息。
-aux:显示所有包含其它使用者的进程。
4.说明
要对进程进行监测和控制,首先要了解当前进程的情况,也就是需要查看当前进程。ps命令就是最基本、也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行、运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。图2给出了ps-aux命令详解。大部分信息都可以通过执行该命令得到。最常用的三个参数是u、a、x。下面就结合这三个参数详细说明ps命令的作用:ps aux
图2 ps-aux命令详解
图2第2行代码中,USER表示进程拥有者;PID表示进程标示符;%CPU表示占用的CPU使用率;%MEM占用的物理内存使用率;VSZ表示占用的虚拟内存大小;RSS为进程占用的物理内存值;TTY为终端的次要装置号码。
STAT表示进程的状态,其中D为不可中断的静止(I/O动作);R正在执行中;S静止状态;T暂停执行;Z不存在,但暂时无法消除;W没有足够的内存分页可分配;高优先序的进程;N低优先序的进程;L有内存分页分配并锁在内存体内 (实时系统或I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是所执行的指令。
4.应用实例
在进行系统维护时,经常会出现内存使用量惊人,而又不知道是哪一个进程占用了大量进程的情况。除了可以使用top命令查看内存使用情况之外,还可以使用下面的命令:
ps aux | sort +5n
××××××××××××××××××××××××××××××××××××××××××××××××××××



$ ls -l /proc/32558
total 0
-r--r--r-- 1 root root 0 Dec 25 22:59 cmdline
-r--r--r-- 1 root root 0 Dec 25 22:59 cpu
lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/ -r-------- 1 root root 0 Dec 25 22:59 environ
lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------ 2 root root 0 Dec 25 22:59 fd/ -r--r--r-- 1 root root 0 Dec 25 22:59 maps
-rw------- 1 root root 0 Dec 25 22:59 mem
-r--r--r-- 1 root root 0 Dec 25 22:59 mounts
lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> // -r--r--r-- 1 root root 0 Dec 25 22:59 stat
-r--r--r-- 1 root root 0 Dec 25 22:59 statm
-r--r--r-- 1 root root 0 Dec 25 22:59 status
文件 "cmdline" 包含启动进程时调用的命令行。"envir" 进程的环境变两。"status" 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"。每个进程的目录都有几个符号链接,"cwd"是指向进程当前工作目录的符号链接,"exe"指向运行的进程的可执行程序,"root"指向被这个进程看作是根目录的目录 (通常是"/")。目录"fd"包含指向进程使用的文件描述符的链接。"cpu"仅在运行 SMP 内核时出现,里面是按 CPU 划分的进程时间。/proc/self 是一个有趣的子目录,它使得程序可以方便地使用/proc 查找本进程地信息。/proc/self 是一个链接到 /proc 中访问 /proc 的进程所对应的 PID 的目录的符号链接。

以上就是偶对/proc的内容补充。大家可以看到,这个只是在outline上很小的一个知识点,就牵涉到了那么多的内容。偶想,这个大概就是为什么Linux难学的原因吧。
-------------------------------------------------------------------------------------------------
小记:因为学习Linux,单位和家里的两套机器都安装了vmware server 1.0.3。但是这个软件不是很稳定。现在家里的那台就是死活无法运行Fedora 7.连vmware的开机画面都没有。只要运行F7,就是黑屏。
今天晚上看来只有重装电脑了。这个也是学习的代价吧。 -_-b 两年没有重装了,偶的仙剑4啊。。。
本帖最近评分记录
  • 赵高 菊花元 +6 原创内容 2007-9-6 19:46
  • garnett_wu 菊花元 +3 Thx 2007-9-5 18:57

TOP

楼主在墨尔本的幸福生活让我们很羡慕啊。
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

不行啊,人总是发懒,发胖。-_-b
赵高兄弟Linux研究到了个什么水平? 交流一下啊

TOP

我已经研究到了可以糊弄学生的水平啦。
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP