📄 读核日记(二).htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.heblinux.org/view.php?skin=art&ID=1594 -->
<HTML><HEAD><TITLE>linuxbyte</TITLE>
<META http-equiv=Content-Language content=zh-cn>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>A:link {
COLOR: #000000; TEXT-DECORATION: none
}
A:visited {
COLOR: #000000; TEXT-DECORATION: none
}
A:hover {
TEXT-DECORATION: underline
}
BODY {
FONT-SIZE: 12px; SCROLLBAR-ARROW-COLOR: #395d81; BACKGROUND-COLOR: #ffffff
}
TABLE {
BORDER-RIGHT: #889093 1px solid; BORDER-TOP: #889093 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #889093 1px solid; COLOR: #000000; BORDER-BOTTOM: #889093 1px solid
}
TEXTAREA {
BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; FONT-WEIGHT: normal; FONT-SIZE: 12px; BORDER-LEFT: #666666 1px solid; COLOR: #000000; BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: Verdana, Tahoma, Arial; BACKGROUND-COLOR: #f8f8f8
}
INPUT {
BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; FONT-WEIGHT: normal; FONT-SIZE: 12px; BORDER-LEFT: #666666 1px solid; COLOR: #000000; BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: Verdana, Tahoma, Arial; BACKGROUND-COLOR: #f8f8f8
}
SELECT {
FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Tahoma, Verdana; BACKGROUND-COLOR: #f8f8f8
}
.nav {
FONT-WEIGHT: bold; FONT-SIZE: 12px; FONT-FAMILY: Tahoma, Verdana
}
.header {
FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #ffffff; FONT-FAMILY: Tahoma, Verdana; BACKGROUND-COLOR: #698cc3
}
.category {
FONT-SIZE: 11px; COLOR: #000000; FONT-FAMILY: Tahoma, Verdana; BACKGROUND-COLOR: #efefef
}
.multi {
FONT-SIZE: 11px; COLOR: #003366; FONT-FAMILY: Tahoma, Verdana
}
.smalltxt {
FONT-SIZE: 11px; FONT-FAMILY: Tahoma, Verdana
}
.mediumtxt {
FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Tahoma, Verdana
}
.bold {
FONT-WEIGHT: bold
}
</STYLE>
</STYLE>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY leftMargin=0 background=读核日记(二).files/bg.gif topMargin=0 rightMargin=0>
<TABLE
style="BORDER-RIGHT: #656b6d 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #656b6d 1px solid; BORDER-LEFT: #656b6d 1px solid; BORDER-BOTTOM: #656b6d 1px solid; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="98%" align=center bgColor=#ffffff border=0>
<TBODY>
<TR height=0>
<TD width="25%"></TD>
<TD width="65%"></TD>
<TD width="10%"></TD></TR>
<TR height=26>
<TD vAlign=center align=right width="100%"
background=读核日记(二).files/topbg.jpg colSpan=3>
<FORM action=search.php method=post><SELECT name=radiobutton> <OPTION
value=news selected>-- 新闻搜索 --</OPTION> <OPTION value=articles>-- 文章搜索
--</OPTION> <OPTION value=software>-- 软件搜索 --</OPTION></SELECT><INPUT
size=15 name=Search> <INPUT type=image src="读核日记(二).files/go.gif"
border=0> </FORM></TD></TR>
<TR>
<TD align=left width="20%"><IMG src="读核日记(二).files/logo.jpg" border=0></TD>
<TD align=middle width="60%"><IMG src="读核日记(二).files/logo2.jpg"
border=1></TD>
<TD align=middle width="20%">::<A
href="http://www.heblinux.org/news.php">网站新闻</A>::<BR>::<A
href="http://www.heblinux.org/articles.php">技术文献</A>::<BR>::<A
href="http://www.heblinux.org/softs.php">软件中心</A>::<BR>::<A
href="http://www.heblinux.org/bbs/index.php" target=_blank>讨论区</A>::
</TD></TR>
<TR>
<TD background=读核日记(二).files/tabledi.jpg colSpan=3 height=6></TD></TR>
<TR>
<TD background=读核日记(二).files/titlebg.jpg colSpan=3 height=22>
<CENTER> <B><A href="http://www.heblinux.org/index.php">首页</A></B> ||
<B><A href="http://www.heblinux.org/bbs/index.php" target=new>讨论区</A></B>
|| <B><A href="http://www.heblinux.org/news.php">新闻中心</A></B> || <B><A
href="http://www.heblinux.org/articles.php">技术文献</A></B> || <B><A
href="http://www.heblinux.org/softs.php">软件中心</A></B> || <B><A
href="http://www.heblinux.org/about.php">关于本站</A></B> || <B><A
href="mailto:oneteam@mail.linuxbyte.net">联系本站</A></B>||</CENTER></TD></TR></TBODY></TABLE>
<TABLE
style="TABLE-LAYOUT: fixed; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="98%" align=center bgColor=#ffffff border=1>
<TBODY>
<TR><!--第二列-->
<TD vAlign=top align=left width="75%"><BR> <A
href="http://www.heblinux.org/index.php">首页</A><< <A
href="http://www.heblinux.org/articles.php">技术文献</A><< <B>读核日记(二)</B><BR><BR>
<UL> <BR><BR><BR>作者 summon
<BR><BR><BR><BR>作者:sunmoon (未经许不可转载) <BR>这几天看的东西,前辈有书指导,不用我费口舌, 简单介绍一下
搞清楚了
linux的启动过程,对于整个系统分析来说.连一个开头都不算.所做的只是知道了系统启动是一些函数的条用顺序.恰如某位朋友来信建议的那样,
如果这样照顺序硬读,实是自残. <BR>好在sunmoon
有一定的自知之明.如此这样下去,等不懂得东西多了.那我就不能坚持了,所以我的原则是?:准备不充分决不轻易动手.
身边有意高手建议,应从应用程序入手,先写一些和系统相关的有水平的程序, 在对程序尽心跟踪.了解整个系统的体系结构和调用体系.再去分析源吗.
同时,sunmoon 也知道,一个操作系统是所有有关软件理论的集大成.sunmoon 不是计算机系毕业的,
对与很多基础课生疏的很.因此不得不找了<汇编语言><操作系统原理><计算机体系结构><编译原理?><操作系统的设计与实现>等经典的书籍放在案头备用.当然,
刚出的一本<<LINUX 操作系统内核分析>>更是非常好. <BR>在昨晚这些后, 我开始着手分析linux 的体系结构:
linux 的内核采用的并不是现在流行(理论上应该更先进的)为内核结构.而采用的是由很多过程组成的一个整合体. 每一个过程可以相互调用.
看起来停乱.这与它的开发历程有关.但我个人感觉, linux 整体如同一个结构化的程序.(决非opp).是由不同的模块完成不同的功能,
然后经过整体的调度,整合而变成一整体. <BR>在<<LINUX 操作系统内核分析>>中分出了5个子系统: 进程调度,
内存管理,虚拟文件系统,进程通信,与网络接口. 具体的每个子系统的功能, 接口, 子系统结构, 数据结构的描述,
可以从这本书上详细的看一看.力争对总体有一个把握. 分清楚在linux 的近50 兆源吗中. 那一部分,实现什么功能,
以便以后阅读是不至于混乱. 如果我又两年时间, 我会用伪码实现linux 功能的模拟.然后以写的角度去分析,这才是学人之长为我所用的绝好办法.
可惜由于一些难言之隐,我近两年的时间都有安排, 所以我只能这样读了 再下一步, 应该分析Makefile <BR><BR>在linux
中每一个进程都由task_struct 数据结构来定义.
task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork() 时,
系统会为我们产生一个task_struct结构.然后从父进程,那里继承一些数据, 并把新的进程插入到进程树中,
以待进行进程管理.因此了解task_struct的结构对于我们理解任务调度(在linux
中任务和进程是同一概念)的关键.在进行剖析task_struct的定义之前. 我们先按照我们的理论推一下它的结构. <BR>1, 进程状态
,将纪录进程在等待,运行,或死锁 <BR>2, 调度信息, 由哪个调度函数调度,怎样调度等 <BR>3, 进程的通讯状况
<BR>4,因为要插入进程树,必须有联系父子兄弟的指针, 当然是task_struct型 5,时间信息, 比如计算好执行的时间, 以便cpu
分配 <BR>6,标号 ,决定改进程归属 <BR>7,可以读写打开的一些文件信息 <BR>8, 进程上下文和内核上下文 <BR>9,处理器上下文
<BR>10,内存信息 因为每一个PCB都是这样的, 只有这些结构,
才能满足一个进程的所有要求.打开/include/linux/sched.h 找到task_struct 的定义 struct
task_struct { /* these are hardcoded - don\t touch */
这里是一些硬件设置对程序原来说是透明的. 其中state 说明了该进程是否可以执行,还是可中断等信息. Flage 是进程号, 在调用
fork() 时给出,addr_limit 是区分内核进程与普通进程在内存存放的位置不同 volatile long state; /* -1
unrunnable, 0 runnable, >0 stopped */ unsigned long flags; /* per
process flags, defined below */ int sigpending; mm_segment_t addr_limit;
/* thread address space: 0-0xBFFFFFFF for user-thead 0-0xFFFFFFFF for
kernel-thread */ struct exec_domain *exec_domain; long need_resched;
<BR>/* various fields */ count 是 计数器 priorrity 是优先级 long counter; long
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -