2010 3 16日总结(linux的进程管理1)
主要看了Linux完全注释那本书,终于准备攻读Linux内核源码了,先看了第二张的总体概念,感觉操作系统有很多东西还真是大同小异,记得ucos就是有一个叫做快表的东西,里面最多可以表示64个进程,而早版的Linux(0.11)也有这个一说的东西。
在Linux中也有一个PCB来表示每个进程,在这个结构体中,有指向任务代码的指针,有指向任务数据的指针,还有指向堆栈段地址(这个栈空间用来保存该进程在CPU中的各个寄存器的值,在进程调度的时候使用,是在内核栈空间上的),还有进程的任务状态段信息结构(tss_struct)
以上是Linux操作系统中进程所拥有的各种状态和相互关系(0.11内核)
其中:可中断睡眠是可以被软终端所唤醒的,我现在的理解是可以被用户空间的程序所唤醒。不可中断睡眠状态是不能被软终端唤醒的,他只能等待调度程序的唤醒或者硬中断的到来。
进程间切换:
在这里面有几个概念先解释一下
GDT:全局描述符表 在我理解来看就是存放所有进程PCB的指针或者就象图里面画的是 每个进程的TSS的描述符。
TSS:任务状态段 任务状态段用于保存相应进程在CPU中的寄存器的值
LDT:局部描述符 存储在全局描述表中,分为数据段和代码段,然后数据段指向用户空间的一段保存该进程数据的地址,代码段指向用户空间的保存该进程代码的内存地址。(如下图)
在进程切换时,执行实际进程切换的任务由swich_to()宏所定义的一段汇编代码来完成。在切换之前,swich_to首先检查要切换的进程是否为当前进程,如果是则什么也不做,直接退出。否则就先将内核全局变量current置为新任务的指针,然后跳转到新任务的任务状态段TSS组成的地址处,造成CPU执行任务切换操作。然后就如第二幅图开始进行压栈和弹栈操作,开始执行新的任务。
Linux采用的是段页式的地址映射,通过计算,我今天知道了每个内存单元能存储4bit的数据。Linux(0.11内核)为每个进程都预留了64M的虚拟内存空间。
相关文档:
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a
1,生成库
第一步要把源代码编绎成目标代码。以下面的代码为例,生成上面用到的hello库:
/* hello.c * ......
ls 命令可以说是linux下最常用的命令之一。它有众多的选项,其中有很多是很有用的,你是否熟悉呢?下面列出了 ls 命令的绝大多数选项。
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时 ......
先介绍一下情况,服务器A和服务器B都是CentOS 4.6的系统,现在要做HA
Cluster,为了避免裂脑的发生,要提高心跳链路的可靠性,下图是现时的连接情况,服务器A的eth2、eth3分别和服务器B的eth2、eth3
相连(没有顺序关系),所有网卡都是千兆网卡,拓扑图如下所示:
在介绍一起硬件情况,服务器A是一台HP DL380
G5, ......
我最近的工作是在linux环境下测试一个.so的动态库,我暂时命名为libdawn.so,是同事实现的,我需要再我的测试程序中加载这个库,并调试该库,我用的编译环境是Eclipse.
1. 在Eclipse->Project->Properities->c/c++ Build->setting->gcc c++ Linker(如果是用gcc c编译的则选gcc c Linker)->Libraries ......
Linux开机过程理解
一. Power on
二. BIOS加电自检:
1. 检测所有周边硬件
2. 寻找启动的磁盘(cd-rom,floppy,IDE HDD,usb device等)
三. & ......