Chinaunix首页 | 论坛 | 博客
  • 博客访问: 386283
  • 博文数量: 124
  • 博客积分: 2911
  • 博客等级: 少校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 15:57
文章分类

全部博文(124)

文章存档

2012年(6)

2011年(26)

2010年(92)

我的朋友

分类: LINUX

2010-11-23 22:19:05

内核态
    对于一般的程序来说,可以通过系统调用,或者是中断等方式进入内核态.
    内核态与用户态的地址空间不一样.每个进程都有其独立的用户态空间,处于虚拟地址的0-3G的位置.而所有进程与内核共享内核态,处于3-4G的地址空间.
----------------------------------------------------------------------------
Kernel: 系統上的一個檔案(file), 包含了驱动主機各項硬體的检测程序与驱动模块。
/lib/module/kernel: 存储设备驱动程序,驱动可以完全访问硬件, 并以模块化(modularize)的形式设置,在系统运行期间可直接装载或卸载。
------------------------
vmlinuz & Initrd
vmlinuz
    vmlinux/vmlinuz是一個包含linux kernel的静态连接的执行文件,文件类型可能是linux接受的執行檔格式之一 (ELF、COFF或a.out).
------------------------
Initrd
     Initrd ramdisk或"initrd"是一个临时文件系统,它在启动阶段被 Linux 内核调用。
     Initrd 主要用于当"根"文件系统被挂载之前,进行准备工作。
------------------------
核心: /boot/vmlinuz 或 /boot/vmlinuz-version;
核心解壓縮所需 RAM Disk: /boot/initrd (/boot/initrd-version);
核心模組: /lib/modules/version/kernel 或 /lib/modules/$(uname -r)/kernel;
核心原始碼: /usr/src/linux 或 /usr/src/kernels/ (要安裝才會有,預設不安裝)
核心版本: /proc/version
系統核心功能: /proc/sys/kernel
------------------------
载入 Kernel Module: insmod/modprobe
-- modprobe 读取 /lib/modules/2.6.xx/modules.dep, 从而处理 module 载入的 dependency 问题。
-- dep档案是透过 depmod 程式所建立。
此外还有 rmmod, mknod等命令进行模块操作
------------------------
lsmod, insmod 与 /proc/modules 的关系
lsmod 显示/proc/modules里的内容。
用insmod加载的模块和/proc/modules里面对应的模块名字相同。
---------------------------------------------------------------------------
Linux 启动顺序【Redhat系】
      Linux核心文件被读入Memory过程:
           1. 系統完 BIOS 並載入 MBR 內的開機管理程序
           2. 載入核心到Memory
           3. 核心在Initrd的帮助下开始检测硬体
           4. 挂载根目录並取得核心模块來驱动所有硬体
           5. 呼叫 /sbin/init 依序启动所有系統所需服務
启动对应文件
        1. 通过/boot/vm进行启动 vmlinuz
2. init /etc/inittab
3. 启动/etc/rc.d/中的以下脚本,并且打开终端
             rc.sysinit                      //系统初始化工作(注1)
     rc.d/rc $Runlevel        //执行在$Runlevel下应启动的脚本。i.e.:inittab中缺省的运行模式是3,则/etc/rc.d/rc调用/etc/rc.d/rc3.d/下的脚本。
     rc.local                //在特定$Runlevel模式设定后运行。i.e.: service squid start;
4. 启动login登录界面
5. 登录时执行以下脚本
   /etc/profile.d/file
   /etc/profile
   /etc/bashrc
   /root/.bashrc
   /root/.bash_profile
注:
1. /etc/rc.d/rc.sysinit    主要做初始化工作,包括:
   调入keymap以及系统字体
   启动swapping
   设置主机名
   设置NIS域名
   检查(fsck)并mount文件系统
   打开quota
   装载声卡模块
   设置系统时钟
等等。
-------------------------------------------------------------------------
设备
/proc/devices, /dev/
/proc/devices 包含【字符设备&块设备】的名称、主设备号等信息,它是驱动模块通过register_chrdev()注册的设备名称。
/dev/ 则是根据/proc/devices里面的设备信息,通过mknod创建的具体设备。包括要创建的具体设备名称,主、从设备号的。用户通过此设备名来访问驱动,即应用程序通过/dev/下的设备文件来操纵设备。
------------------------
主设备号和次设备号
一个字符设备或者块设备(block device)都有一个【主设备号】和【次设备号】。
主设备号用来表示一个特定的驱动程序。
次设备号用来表示使用该驱动程序的各设备。

例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。
那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。
------------------------
主设备号和次设备号的表示
在Linux内核中,dev_t类型用来表示设备号。在Linux 2.6.29.4中,dev_t定义为一个无符号长整型变量,如下:
  typedef u_long dev_t; 
u_long在32位机中是4个字节,在64位机中是8字节。以32位机为例,其中高12表示主设备号,低20为表示次设备号
REF:
------------------------------------------------
Loop Device
功能:
用文件来模拟块设备 Block Devices.
Loop device 可以把一些非 block device 模拟 block device 后供 mount 等使用。
Example:
mount -t -o loop minix disk.img  /mnt/minix_c: 以 Loop device 的形式挂载映像文件,使映像文件模拟成一个逻辑块设备 Block device。
其中mount -o loop 简化了先 losetup 后 mount 的过程。
查看:
loop device 默认是8个,可以通过/dev/loop*查看loop块设备.
使用如下命令增加为16个:
rmmod loop
modprobe loop max_loop=16
附:
Block device 一般指可以随机读写存取的装置。
相反, Character device 不可以随机读写存取,如 Pinter, Audio device.
/dev/lp* 就是这类 character device file
/dev/zero 也是一個 character device file,读取该文件会提供 null byte输出。
----------------------------------------------------------------------------------------------------------------------------------
linux内核模块:负责【进程调度,内存管理,文件系统,进程间通信,网络接口】
进程调度
调度策略:按照优先级的进程调度算法。
调度分类:
SCHED_OTHER /* 普通:分时调度*/
SCHED_FIFO /* 实时:先到先服务;FIFO*/
SCHED_RR /* 实时:时间片轮转*;Round Robin/
Linux有140个优先级,前100属于SCHED_FIFO,SCHED_RR,后40属于SCHED_OTHER。
SCHED_FIFO, SCHED_RR优先级高于所有SCHED_OTHER的进程,所以只要他们运行,在运行完之前,所有SCHED_OTHER的进程必须等待。
举例:
以root身份运行以下程序——普通用户无法调用sched_setscheduler系统调用。
不过做好准备,一但运行起来之后,要结束就只有按机箱上的reset。
#include
#include
int main(){
struct sched_param sp;
sp.sched_priority = 99;
sched_setscheduler(0, SCHED_RR, &sp);
printf("%d\n", sched_getscheduler(0));
for(;;);
return 0;
}
----------------------------------------------------------------------------------------------------------------------------------
文件系统: VFS
为隐藏各种硬件的具体细节,为所有的文件系统提供统一的接口,linux采用VFS(虚拟文件系统)机制向用户提供统一的访问接口。
-------------------------------------------------------------------------
LVM(Logical Volume Manager)
Linux磁盘分区管理机制, 建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。
比如:
将若干个磁盘分区连接为一个整块的卷组(volumegroup),形成一个存储池。在Volume Group上随意创建Logical Volumes,并进一步在Logical Volumes上创建 File System(如下图所示):
       |___file system
|  |__Logical Volume(1)--|___file system
Partion(sda1)---|  |        |___file system
|  |        |..............
|  |        |___file system
Partion(sda2)---|--Volume Group--|__Logical Volume(2)--|___file system
|  |        |___file system
|  |        |..............
Partion(sda3)---|  |__...............................

管理员通过LVM可以方便的调整 volume group的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义: “development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
----------------------------------------------------------------------------------------------------------------------------------
/etc/hosts:
功能:
告诉本主机哪些【域名】或【主机名】对应哪些ip.
系统解析一个域名时会先去/etc/hosts查找再去DNS查找。(可以在/etc/host.conf文件修改使用的优先顺序)
其中【域名】对应Internet;【主机名】对应局域网。
在局域网通过hosts文件,主机名被解析到对应ip;在internet上,如果本机不想使用internet上的域名解析,这时可以更改hosts文件,加入自己的域名解析。
Example:
192.168.1.100 linumu100 test100
假设192.168.1.100是一台Web Server,在网页中输入 或 就会打开192.168.1.100的网页。

Following content comes from fedora15's /etc/hosts:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Line1: 127.0.0.1.... This is IPv4 lookback address
Line2: ::1... This is IPv6 lookback address
Generally speaking , hostname/alias name "localhost" is necessary for many application.

具体解释:
一般有如下类似内容:
127.0.0.1 localhost.localdomain localhost
192.168.1.100 linmu100.com linmu100
192.168.1.120 ftpserver ftp120
通常首先记录本机的ip和主机名:
127.0.0.1 localhost.localdomain localhost
hosts文件每行记录一个主机,由三部份组成:
第一部份:网络IP地址;
第二部份:主机名/域名;
第三部份:主机名别名;(Selective)
可解决问题:
1. 远程登录linux主机过慢问题
客户端远程登录linux主机,每次输入密码后会等很长一段时间才会进入,这是因为linux主机在返回信息时需要解析ip。
而在主机hosts文件事先加入客户端ip地址,这时从客户端远程登录linux会变快。
2.双机互连
当两台主机只是为了双机互连,这时他们都需要设置自己的ip,同时在对方的hosts文件里加入自己的ip和主机名。
hostname命令:
可以通过hostname工具来显示或者设置主机名。
不过设置主机名是临时的,重启系统后,临时主机名将不会存在。
修改主机名 Modify Hostname:
1. #hostname NewName 
2. 修改/etc/sysconfig/network中的HOSTNAME
3. 修改/etc/hosts 中的OldName成NewName
4. reboot

阅读(1381) | 评论(0) | 转发(0) |
0

上一篇:Regex_Study

下一篇:SVN_Server

给主人留下些什么吧!~~