Month: February 2013

在virtualbox的centos里编译内核

记录一下我搭建linux内核调试环境的步骤 机器、OS确定 1. 平时工作用的linux环境:Ubuntu 12.04. 当然你用windows也可以。 2. 编译好后的内核最好不要装在工作机器上,所以我用virtualbox装了一个centos 5.7作为试验场, 它的内核版本是2.6.18-274.el5 编译内核 3. 下载2.6.32.60版本的内核源码到centos上并解压 4. 创建一个适用于本机的、简洁的config: make localmodconfig (如遇提示,按enter) (2.6.32之后的版本才支持local config) 5. 在.config文件里加上CONFIG_SYSFS_DEPRECATED_V2=y,否则新内核启动时会找不到/dev/root; 然后make oldconfig(如遇提示,按enter) 6. 编译内核和模块 make clean; make; make modules;  在我的centos上,这三步合起来要半小时左右。 安装新内核 7. 把用户切换成root 8. 安装模块和内核:make modules_install; make install 9. 重启一下centos, 在新启的grub里选择新版内核.

linux中处理器的三种活动状态

在某一瞬间,linux中的处理器必定在干下面三种活之一:     1.运行于用户空间,执行用户进程     2.运行于内核空间,处于进程上下文,代表某个特定的进程执行 (比如,响应应用程序的系统调用)     3.运行于内核空间,处于中断上下文,与任何进程无关。

ubuntu + virtual box + centos + kgdb串口 调试内核

OS版本与职责分工: Ubuntu作为Dev Machine, 版本,内核版本 CentOS作为Target Machine (即被调试的系统), 版本, 内核版本 第1步:Target Machine 重新编译内核 1. make menuconfig 2. 打开内核调试信息.在Kernel hacking里选中"Kernel debugging",并且     a.打开"Compile the kernel with debug info"     b.打开"Compile the kernel with frame pointers"     c.关闭"Write protect kernel read-only data structures",否则无法设置断点 3. 打开KGDB相关选项. 在Kernel hacking     a.打开“KGDB: kernel debugging with remote gdb”     b.然后再进去打开"KGDB: use kgdb …

ubuntu + virtual box + centos + kgdb串口 调试内核 Read More »

关于linux的虚拟内存

用户空间的虚拟内存看来是连续的,但映射到物理内存时就未必了。 CPU不知道虚拟内存是什么东西,它只能操作物理内存。所以系统中需要有物理内存和虚拟内存的映射,维护这个映射关系的数据结构就是页表(page table).

磁盘格式化具体是什么?

格式化分两种:   1.物理格式化(低格):即把磁盘分成扇区。磁盘厂商一般会预先做好。   2.逻辑格式化: 操作系统把初始文件系统的数据结构存储到磁盘上。具体信息包括空闲空间、第一个初始目录等。 未经逻辑格式化、没有文件系统的磁盘称作Raw Disk.  由于没有文件系统存在,直接通过物理地址访问Raw Disk可以获得比较高的性能。有的数据库系统就喜欢使用Raw Disk.

磁盘调度

当磁盘I/O队列中有多个请求时,它应该先处理哪些请求? 从队列选择请求的过程和策略就叫 磁盘调度 最直接的做法是先来先服务( FCFS), 它看起来公平,但效率可能很低。因为几个连续的请求的目标磁盘位置可能相隔很远,顺序处理这些请求会导致磁头做很多次长距离移动,导致总的寻道时间很长。 SSTF(最短寻道时间优先算法)则总是选择离自己最近的先处理,但公平性很差,甚至可能造成有的请求饿死。 另有SCAN/C-SCAN(电梯算法及其变种), LOOK等。

分层设计的文件系统

从上到下依次为: L4: 逻辑文件系统 — 对应用程序提供文件的元数据,比如文件名、目录结构,以及它们跟逻辑块地址的关系. 其中用到的一个重要数据结构是FCB, File Control Block.  L3: File-Organization Module — 把逻辑块地址(0,1,2…)转换成物理块地址(柱面号+磁道号+扇区号) L2: 基本文件系统 — 根据物理块地址调用设备驱动程序 L1: I/O控制 — 即设备驱动程序和中断处理服务程序 Linux在文件系统之上还加了一个VFS(Virtual File System)层,使得系统内可以有多个文件系统共存,并且可以使用单一的API来操纵。早期的DOS没有VFS,所以就没有让多文件系统共存的能力。

磁盘的引导控制块

引导控制块(boot control block) 一般是分区的第一个block, 里面包含了从这个分区引导操作系统所需要的信息。 1. 引导信息一般是二进制文件,读入内存后让CPU直接执行 2. 引导信息可以用来引导某个操作系统,也可以用来给出一个菜单,让用户在多个OS中选择一个 3. 如果分区上没有操作系统,那么这个block的内容为空

磁盘的块大小(Block Size)和扇区大小(Sector Size)

Logical Block Size:A "block", a contiguous number of bytes, is the minimum unit of memory that is read from and written to a disk by a disk driver ( 出处) 它一般是Sector Size的倍数 要明确的是,块是文件系统的抽象,不是磁盘本身的属性。 扇区大小则是磁盘的物理属性,它是磁盘设备寻址的最小单元。 Linux中, 1.查看某个分区的Block Size:  blockdev –getbsz /dev/sda7 2.查看硬盘的扇区大小(Sector Size):  通过fdisk -l可以看到 Linux内核还要求 Block_Size = Sector_Size  * (2的n次方),并且Block_Size <= 内存的Page_Size(页大小)