文章分类 -  Linux相关

Linux0.11内核相关分析
GCC,Linux等文档查询
摘要:http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp 阅读全文

posted @ 2011-09-14 11:08 不知道 阅读(201) 评论(0) 推荐(0)

linux /dev目录
摘要:linux /dev目录 dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和我们常用的windows, dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。 例如:我们在系统中键入:cd /dev/cdrom 我们就可以看到光驱中的文件了。同样道理,我们键入:cd /dev/mouse 就可以看看鼠标的相关文件。在这个目录下,有一个null设备,这个东西本身没有任何意义。如果你向这个. 阅读全文

posted @ 2011-09-06 10:27 不知道 阅读(11430) 评论(0) 推荐(0)

GCC静态链接与动态链接
摘要:传说中的GCC神功盖世,威力无比,今日一见,果然不同凡响。拿出收藏了多年的HelloWorld牛刀小试,于是心悦诚服。看代码:1:建静态库/* hellos.h */#ifndef _HELLO_S_H#define _HELLO_S_Hvoid printS(char* str);#endif/* hellos.c */#include "hellos.h"void printS(char* str) {printf("print in static way: %s", str);}输入命令:gcc -c -o hellos.o hellos.car 阅读全文

posted @ 2011-09-02 14:42 不知道 阅读(3472) 评论(0) 推荐(0)

资料搜索
摘要:进程管理_linux0.11.doc 百度文库MINIX操作系统设计与实现 Andrew S.Tanenbaum 阅读全文

posted @ 2011-08-30 14:47 不知道 阅读(99) 评论(0) 推荐(0)

fork()两次不同返回值的实现
摘要:【NOTE4】首先必须有一点要清楚,函数的返回值是储存在寄存器eax中的。其次,当fork返回时,新进程会返回0是因为在初始化任务结构时,将eax设置为0;在fork中,把子进程加入到可运行的队列中,由进程调度程序在适当的时机调度运行。也就是从此时开始,当前进程分裂为两个并发的进程。无论哪个进程被调度运行,都将继续执行fork函数的剩余代码,执行结束后返回各自的值。【NOTE5】对于fork来说,父子进程共享同一段代码空间,所以给人的感觉好像是有两次返回,其实对于调用fork的父进程来说,如果fork出来的子进程没有得到 调度,那么父进程从fork系统调用返回,同时分析sys_fork知道,f 阅读全文

posted @ 2011-08-24 15:40 不知道 阅读(4775) 评论(0) 推荐(0)

逻辑地址,物理地址,虚拟地址
摘要:http://wenku.baidu.com/view/fafc22f90242a8956bece4d4.html一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与 阅读全文

posted @ 2011-08-13 17:21 不知道 阅读(1343) 评论(0) 推荐(0)

Linux 内核--fork()函数创建进程 .
摘要:本文分析基于Linux 0.11内核,转载请表明出处http://blog.csdn.net/yming0221/archive/2011/06/05/6527337.aspxLinux在move_to_user_mode()之后,进程0通过fork()产生子进程实际就是进程1(init进程)。其中fork()是通过内嵌汇编的形式给出view plaincopy to clipboardprint?#define_syscall0(type,name)/ typename(void)/{/long__res;/__asm__volatile("int$0x80"///调用系 阅读全文

posted @ 2011-08-10 00:42 不知道 阅读(1537) 评论(0) 推荐(0)

用户态和内核态。实模式和保护模式
摘要:内核态与用户态是操作系统的两种运行级别,intel cpu提供Ring0-Ring3三种级别的运行模式。Ring0级别最高,Ring3最低。 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级) 内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。 在内核态下CPU可执行任何指令,在用户态下CPU只能执行非特权指令。当CPU处于内核态,可以随意进入用户态; 阅读全文

posted @ 2011-08-09 17:07 不知道 阅读(3310) 评论(0) 推荐(1)

GDT TSS IDT LDT
摘要:这个地方很烦,今天总结一下。这里的代码是2.6.27 这些都是x86硬件设计的,Linux内核其实并不想依照x86的设计,但是要用人家的硬件就必须应付一下,比如 原来功能实现很复杂,但Linux可能只实现其中的部分功能,其它功能Linux自己通过其它方法去完成。 Linux中的寻址: logical addr --> linear addr --> physical addr 第一个转换是通过GDT的分段机制,第二个转换是通过分页机制。CPU使用logical addr, CPU中的MMU部件使用 physical addr。比如一个程序编译后,代码段的指令地址是0x0804888 阅读全文

posted @ 2011-08-02 11:42 不知道 阅读(4260) 评论(1) 推荐(0)

由linux0.11进程调度小窥内存分段机制(转)
摘要:内存分段机制的一个主要应用在于实现操作系统的多任务,它为应用程序提供了两个关键抽象:一个独立的逻辑控制流,一个私有的地址空间。本文将针对进程的创建和调度进行分析和实验,从而更深刻的理解分段机制。有关调试环境的建立见前文:从linux0.11引导代码小窥内存分段机制进程调度初始化(sched_init函数) 在引导代码执行结束后,执行序列将跳转到main函数,执行一系列的初始化工作,其中就有对任务0的初始化过程,其代码包含在kernel/sched.c中的sched_init函数中:void sched_init(void){ int i; struct desc_struct * p; if 阅读全文

posted @ 2011-08-01 17:41 不知道 阅读(2226) 评论(0) 推荐(0)

关于_set_gate的注解
摘要:#define _set_gate(gate_addr,type,dpl,addr)\__asm__("movw %%dx,%%ax\n\t"\ "movw %0,%%dx\n\t"\ "movl %%eax,%1\n\t"\ "movl %%edx,%2"\ :\ :"i"((short)(0x8000+(dpl<<13)+(type<<8))),\ "o"(*((char *)(gate_addr))),\ "o"(*(4+(c 阅读全文

posted @ 2011-07-29 14:23 不知道 阅读(2088) 评论(0) 推荐(1)

linux0.11 head.s中lss相关说明
摘要:很早自己写过的(在CUblog上也贴了下) 很早前的文章懒得再看里面对错了关于linux早期内核0.11的一些感悟,写成2则问答 以此为记,免得自己忘记!! :)详细见全文问:关于linux 0.11中 head.s中有一处不明白startup_32:cldmovl $0x10,%eaxmov %ax,%dsmov %ax,%esmov %ax,%fsmov %ax,%gslss _stack_start,%esp关于其中lss _stack_start,%esp这句 我不是很明白,_stack_start表示什么?我在另一篇文章中看到说_stack_start是C编译器自动生成的堆栈,那这个 阅读全文

posted @ 2011-07-26 15:11 不知道 阅读(3495) 评论(0) 推荐(0)

由linux0.11代码小窥内存分段机制(转)
摘要:http://blog.csdn.net/lijingze2003/archive/2005/03/25/330529.aspx 阅读本文手头上应该有一份linux0.11源代码,引导程序调试软件bochs(其实是个虚拟机,不过它的调试功能实在是完美)和配套的linux0.11内核img(linux-0.11-devel-040329.zip)。最好再有一本代码注释,推荐赵炯博士的《Linux内核完全注释——内核版本0.11》。显然,bochs的使用方法必须知道,具体操作请参阅《Linux内核完全注释》第14章;在bochs能够正确运行之后,使用bochsdbg进行调试,其使用方法见“Linu 阅读全文

posted @ 2011-07-25 21:30 不知道 阅读(488) 评论(0) 推荐(0)

编写MBR从硬盘启动linux0.11
摘要:编写MBR从硬盘启动linux0.11 (转)计算机启动时BIOS会把启动盘第一个扇区的数据读入内存0x7C00开始处,然后跳到这里继续执行。从硬盘启动和从软盘启动唯一的区别就是映象文件存储方式的不同:1. 对于从软盘启动的方式,映象文件连续地存放在软盘开始的位置处。放在第一个扇区的bootsect.s被BIOS读入内存后,就会把余下的映象文件读入内存,然后继续执行2. 对于从硬盘启动的方式,映象文件存放在Minix格式的硬盘分区里,MBR(硬盘第一个扇区)中的程序需要根据硬盘的参数和Minix文件系统的存储格式读出它本文描述了如何编写MBR中的程序,把存放在硬盘第一个分区根目录下的linux 阅读全文

posted @ 2011-07-24 13:06 不知道 阅读(2113) 评论(1) 推荐(0)

linux0.11下的中断机制分析
摘要:异常就是控制流中的突变,用来响应处理器状态中的某些变化。当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序,这张表即中断描述符表IDT。本文将针对Linux0.11代码进行分析和调试,来了解中断机制,主要分析以下三个问题:1. 中断描述符表的建立。2. 一般中断的处理过程,以0x3号中断为例。3. 系统调用的处理过程,以fork系统调用为例。 有关调试环境的建立请参考:从linux0.11引导代码小窥内存分段机制。中断描述符表的建立 中断描述符表(IDT)的创建代码在boot/head.s中,与全局描述符表的创建类 阅读全文

posted @ 2011-07-24 02:28 不知道 阅读(2869) 评论(0) 推荐(0)

-msoft-float -mhard-float区别
摘要:hard-float 是直接生成浮点运算的指令(如果有的话);soft-float 是用库模拟浮点运算(如果有的话)。 阅读全文

posted @ 2011-07-22 15:08 不知道 阅读(520) 评论(0) 推荐(0)

u-boot移植过程
摘要:uboot移植过程1.修改Makefile首先给要建立的S3C2410开发板取名为TE2410, 移植uboot时以smdk2410为模板,修改Makefile#tar xvjf u-boot-1.1.3.tar.bz2#cd u-boot-1.1.3#vi Makefile scb9328_config : unconfig @./mkconfig $(@:_config=) arm arm920t scb9328 NULL imxsmdk2400_config : unconfig @./mkconfig $(@:_config=) arm arm920t smdk2400 NULL s3 阅读全文

posted @ 2011-07-22 14:21 不知道 阅读(2370) 评论(0) 推荐(0)

Linux系统中堆栈的使用方法
摘要:本节内容概要描述了Linux内核从开机引导到系统正常运行过程中对堆栈的使用方式。这部分内容的说明与内核代码关系比较密切,可以先跳过。在开始阅读相应代码时再回来仔细研究。 Linux0.11系统中共使用了四种堆栈。一种是系统初始化时临时使用的堆栈:一种是供内核程序自己使用的堆栈(内核堆栈),只有一个,位于系统地址空间的固定位置,也是后来任务0的用户态堆栈:另一种是每个任务通过系统调用,执行内核程序时使用的堆栈,我们称之为任务的内核态堆栈,每个任务都有自己独立的内核态堆栈;最后一种是任务在用户态执行的堆栈,位于任务(进程)地址空间的末端。下面分别对它们进行说明。 2.7.1初始化阶段开机初始化(b 阅读全文

posted @ 2011-07-21 20:44 不知道 阅读(6515) 评论(0) 推荐(0)

Linux文件属性结构
摘要:Drwxr-xr-x 5 root root 4096 ju125 .cshrc (1) (2) (3) (4)(5) (6) (7)(1) 파일 하가(2)링크 수(3)소유자명(계정명)(4)그룹명(5)파일 크기(바이트 단위)(6)갱신 날짜,시간(7)파일명파일 허가상태 d rwx rwx rwx (1) (2) (3) (4) 허가권에는 총 10자로 되어 있다 (1)파일 구분: 파일의 종류가 무엇인가를 나타낸다 (2)소유자:파일의 소유자(만든 이)에 대한 허가권 (3)그룹:소유자가 속한 그룹에 대한 허가권 (4)그 밖의 사람들: 소유자와 그룹 이외의 사 阅读全文

posted @ 2011-07-21 16:19 不知道 阅读(176) 评论(0) 推荐(0)

Linux boot过程
摘要:1.컴퓨터가 켜지면,POST과정에 의해 시스템이 초기화된다2.Boot record나 하드인 경우 MBR(Master boot record)을 읽어 들인다.3.MBR에 설치되 grub가 실행된다.4.커널이 메모리로 로딩되면,만일 커널이 압축되었다면 압출을 헤제한다.5.커널은 하드,플로피,네크워크 어댑터 등을 검사하며, 디바이스 드라이버를 설정한다.6.프로세서를 보호모드로 전환시킨다.7.root파일 시스템을 마운트한다.8.커널은 /etc/sysconfig/init 을 백그라운로 실행한다.9.init는 /etc/rc 를 실행한다.10 r 阅读全文

posted @ 2011-07-21 14:41 不知道 阅读(193) 评论(0) 推荐(0)

导航