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的虚拟内存空间。
相关文档:
linux socket 优化
2008-06-12 16:40
使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信。与其他 API 一样,您可以通过一些方法使用 Sockets API,从而提高 Socket 的性能,或者限制 Socket 的性能。本文探索了 4 种使用 Sockets API 来 ......
1,-c 编译目标代码
gcc -o hello.o -c hello.c //-o 只是指定生成目标文件名
或
gcc -c hello.c
都生成hello.o文件,不可以执行。
gcc -o hello hello.o
用目标文件生成hell ......
参见:http://www.ibm.com/developerworks/cn/linux/l-proc.html
使用 /proc 文件系统来访问 Linux 内核的内容
这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口
文档选项
<tr
valign="top"><td width="8"><img alt="" height="1" width="8& ......
一、头文件
gcc 在编译时寻找所需要的头文件 :
※搜寻会从-I开始
※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
※再找内定目录
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-l ......
在前面的准备工作完成之后,先实验一下,谈不上真正的移植 ,因为代码都没有改的。
首先修改顶层的Makefile,修改ARCH,CROSS_COMPLIE变量。
#ARCH ?= $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
执行make smd ......