36.html

来自「linux 0.11中文版 有注释」· HTML 代码 · 共 370 行 · 第 1/3 页

HTML
370
字号
<html>
<head>
<title>include/linux/sched.h</title>
<meta name='robots' content='noindex,nofollow'>
<meta name='generator' content='GLOBAL-5.4.1'>
</head>
<body text='#191970' bgcolor='#f5f5dc' vlink='gray'>
<a name='TOP'><h2><a href='../mains.html'>root</a>/<a href='../files/99.html'>include</a>/<a href='../files/101.html'>linux</a>/sched.h</h2>
<i><font color='green'>/* [&lt;][&gt;][^][v][top]<a href='#BOTTOM'>[bottom]</a><a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
<hr>
<h2><a href='../J/36.html' title='Multiple included from 34 places.'>INCLUDED FROM</a></h2>
<hr>
<pre>
<a name='L1'><font color='darkred'>#ifndef</font> <a href='../S/36.html#L2' title='Defined at 2 in include/linux/sched.h.'>_SCHED_H</a>
<a name='L2'><font color='darkred'>#define</font> <a href='../S/36.html#L1' title='Refered from 1 in include/linux/sched.h.'>_SCHED_H</a>
<a name='L3'>
<a name='L4'><font color='darkred'>#define</font> <a href='../R/148.html' title='Multiple refered from 16 places.'>NR_TASKS</a> 64             <i><font color='green'>// 系统中同时最多任务(进程)数。</font></i>
<a name='L5'><font color='darkred'>#define</font> <a href='../R/87.html' title='Multiple refered from 8 places.'>HZ</a> 100                  <i><font color='green'>// 定义系统时钟滴答频率(1 百赫兹,每个滴答10ms)</font></i>
<a name='L6'>
<a name='L7'><font color='darkred'>#define</font> <a href='../R/69.html' title='Multiple refered from 9 places.'>FIRST_TASK</a> task[0]      <i><font color='green'>// 任务0 比较特殊,所以特意给它单独定义一个符号。</font></i>
<a name='L8'><font color='darkred'>#define</font> <a href='../R/112.html' title='Multiple refered from 4 places.'>LAST_TASK</a> task[<a href='../S/36.html#L4' title='Defined at 4 in include/linux/sched.h.'>NR_TASKS</a>-1]      <i><font color='green'>// 任务数组中的最后一项任务。</font></i>
<a name='L9'>
<a name='L10'><font color='darkred'>#include</font> &lt;<a href='33.html'>linux/head.h</a>&gt;         <i><font color='green'>// head 头文件,定义了段描述符的简单结构,和几个选择符常量。</font></i>
<a name='L11'><font color='darkred'>#include</font> &lt;<a href='31.html'>linux/fs.h</a>&gt;           <i><font color='green'>// 文件系统头文件。定义文件表结构(file,buffer_head,m_inode 等)。</font></i>
<a name='L12'><font color='darkred'>#include</font> &lt;<a href='35.html'>linux/mm.h</a>&gt;           <i><font color='green'>// 内存管理头文件。含有页面大小定义和一些页面释放函数原型。</font></i>
<a name='L13'><font color='darkred'>#include</font> &lt;<a href='39.html'>signal.h</a>&gt;             <i><font color='green'>// 信号头文件。定义信号符号常量,信号结构以及信号操作函数原型。</font></i>
<a name='L14'>
<a name='L15'><font color='darkred'>#if</font> (<a href='../S/31.html#L59' title='Defined at 59 in include/linux/fs.h.'>NR_OPEN</a> &gt; 32)
<a name='L16'><font color='darkred'>#error</font> "Currently the close-on-exec-flags are in one word, max 32 files/proc"
<a name='L17'><font color='darkred'>#endif</font>
<a name='L18'>
<a name='L19'><i><font color='green'>// 这里定义了进程运行可能处的状态。</font></i>
<a name='L20'><font color='darkred'>#define</font> <a href='../R/254.html' title='Multiple refered from 3 places.'>TASK_RUNNING</a> 0          <i><font color='green'>// 进程正在运行或已准备就绪。</font></i>
<a name='L21'><font color='darkred'>#define</font> <a href='../R/253.html' title='Multiple refered from 4 places.'>TASK_INTERRUPTIBLE</a> 1    <i><font color='green'>// 进程处于可中断等待状态。</font></i>
<a name='L22'><font color='darkred'>#define</font> <a href='../R/256.html' title='Multiple refered from 2 places.'>TASK_UNINTERRUPTIBLE</a> 2  <i><font color='green'>// 进程处于不可中断等待状态,主要用于I/O 操作等待。</font></i>
<a name='L23'><font color='darkred'>#define</font> <a href='../R/257.html' title='Multiple refered from 3 places.'>TASK_ZOMBIE</a> 3           <i><font color='green'>// 进程处于僵死状态,已经停止运行,但父进程还没发信号。</font></i>
<a name='L24'><font color='darkred'>#define</font> <a href='../S/67.html#L234' title='Refered from 234 in kernel/exit.c.'>TASK_STOPPED</a> 4          <i><font color='green'>// 进程已停止。</font></i>
<a name='L25'>
<a name='L26'><font color='darkred'>#ifndef</font> <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>
<a name='L27'><font color='darkred'>#define</font> <a href='../R/149.html' title='Multiple refered from 109 places.'>NULL</a> ((<b>void</b> *) 0)       <i><font color='green'>// 定义NULL 为空指针。</font></i>
<a name='L28'><font color='darkred'>#endif</font>
<a name='L29'>
<a name='L30'><i><font color='green'>// 复制进程的页目录页表。Linus 认为这是内核中最复杂的函数之一。( mm/memory.c, 105 )</font></i>
<a name='L31'><b>extern</b> <b>int</b> <a href='../S/94.html#L230' title='Defined at 230 in mm/memory.c.'>copy_page_tables</a> (<b>unsigned</b> <b>long</b> from, <b>unsigned</b> <b>long</b> to, <b>long</b> size);
<a name='L32'><i><font color='green'>// 释放页表所指定的内存块及页表本身。( mm/memory.c, 150 )</font></i>
<a name='L33'><b>extern</b> <b>int</b> <a href='../S/94.html#L158' title='Defined at 158 in mm/memory.c.'>free_page_tables</a> (<b>unsigned</b> <b>long</b> from, <b>unsigned</b> <b>long</b> size);
<a name='L34'>
<a name='L35'><i><font color='green'>// 调度程序的初始化函数。( kernel/sched.c, 385 )</font></i>
<a name='L36'><b>extern</b> <b>void</b> <a href='../S/74.html#L547' title='Defined at 547 in kernel/sched.c.'>sched_init</a> (<b>void</b>);
<a name='L37'><i><font color='green'>// 进程调度函数。( kernel/sched.c, 104 )</font></i>
<a name='L38'><b>extern</b> <b>void</b> <a href='../S/74.html#L146' title='Defined at 146 in kernel/sched.c.'>schedule</a> (<b>void</b>);
<a name='L39'><i><font color='green'>// 异常(陷阱)中断处理初始化函数,设置中断调用门并允许中断请求信号。( kernel/traps.c, 181 )</font></i>
<a name='L40'><b>extern</b> <b>void</b> <a href='../S/79.html#L181' title='Defined at 181 in kernel/traps.c.'>trap_init</a> (<b>void</b>);
<a name='L41'><i><font color='green'>// 显示内核出错信息,然后进入死循环。( kernel/panic.c, 16 )。</font></i>
<a name='L42'><b>extern</b> <b>void</b> <a href='../S/72.html#L24' title='Defined at 24 in kernel/panic.c.'>panic</a> (<b>const</b> <b>char</b> *str);
<a name='L43'><i><font color='green'>// 往tty 上写指定长度的字符串。( kernel/chr_drv/tty_io.c, 290 )。</font></i>
<a name='L44'><b>extern</b> <b>int</b> <a href='../D/1093.html' title='Multiple defined in 2 places.'>tty_write</a> (<b>unsigned</b> minor, <b>char</b> *buf, <b>int</b> count);
<a name='L45'>
<a name='L46'><b>typedef</b> <b>int</b> (*fn_ptr) ();       <i><font color='green'>// 定义函数指针类型。</font></i>
<a name='L47'>
<a name='L48'><i><font color='green'>// 下面是数学协处理器使用的结构,主要用于保存进程切换时i387 的执行状态信息。</font></i>
<a name='L49'><b>struct</b> i387_struct
<a name='L50'><font color='red'>{</font>
<a name='L51'>  <b>long</b> cwd;                     <i><font color='green'>// 控制字(Control word)。</font></i>
<a name='L52'>  <b>long</b> swd;                     <i><font color='green'>// 状态字(Status word)。</font></i>
<a name='L53'>  <b>long</b> twd;                     <i><font color='green'>// 标记字(Tag word)。</font></i>
<a name='L54'>  <b>long</b> fip;                     <i><font color='green'>// 协处理器代码指针。</font></i>
<a name='L55'>  <b>long</b> fcs;                     <i><font color='green'>// 协处理器代码段寄存器。</font></i>
<a name='L56'>  <b>long</b> foo;
<a name='L57'>  <b>long</b> fos;
<a name='L58'>  <b>long</b> st_space[20];            <i><font color='green'>/* 8*10 bytes for each FP-reg = 80 bytes */</font></i>
<a name='L59'><font color='red'>}</font>;
<a name='L60'>
<a name='L61'><i><font color='green'>// 任务状态段数据结构(参见列表后的信息)。</font></i>
<a name='L62'><b>struct</b> tss_struct
<a name='L63'><font color='red'>{</font>
<a name='L64'>  <b>long</b> back_link;               <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L65'>  <b>long</b> esp0;
<a name='L66'>  <b>long</b> ss0;                     <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L67'>  <b>long</b> esp1;
<a name='L68'>  <b>long</b> ss1;                     <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L69'>  <b>long</b> esp2;
<a name='L70'>  <b>long</b> ss2;                     <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L71'>  <b>long</b> cr3;
<a name='L72'>  <b>long</b> eip;
<a name='L73'>  <b>long</b> eflags;
<a name='L74'>  <b>long</b> eax, ecx, edx, ebx;
<a name='L75'>  <b>long</b> esp;
<a name='L76'>  <b>long</b> ebp;
<a name='L77'>  <b>long</b> esi;
<a name='L78'>  <b>long</b> edi;
<a name='L79'>  <b>long</b> es;                      <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L80'>  <b>long</b> cs;                      <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L81'>  <b>long</b> ss;                      <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L82'>  <b>long</b> ds;                      <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L83'>  <b>long</b> fs;                      <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L84'>  <b>long</b> gs;                      <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L85'>  <b>long</b> ldt;                     <i><font color='green'>/* 16 high bits zero */</font></i>
<a name='L86'>  <b>long</b> trace_bitmap;            <i><font color='green'>/* bits: trace 0, bitmap 16-31 */</font></i>
<a name='L87'>  <b>struct</b> i387_struct i387;
<a name='L88'><font color='red'>}</font>;
<a name='L89'>
<a name='L90'><i><font color='green'>// 这里是任务(进程)数据结构,或称为进程描述符。</font></i>
<a name='L91'><i><font color='green'>// ==========================</font></i>
<a name='L92'><i><font color='green'>// long state 任务的运行状态(-1 不可运行,0 可运行(就绪),&gt;0 已停止)。</font></i>
<a name='L93'><i><font color='green'>// long counter 任务运行时间计数(递减)(滴答数),运行时间片。</font></i>
<a name='L94'><i><font color='green'>// long priority 运行优先数。任务开始运行时counter = priority,越大运行越长。</font></i>
<a name='L95'><i><font color='green'>// long signal 信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。</font></i>
<a name='L96'><i><font color='green'>// struct sigaction sigaction[32] 信号执行属性结构,对应信号将要执行的操作和标志信息。</font></i>
<a name='L97'><i><font color='green'>// long blocked 进程信号屏蔽码(对应信号位图)。</font></i>
<a name='L98'><i><font color='green'>// --------------------------</font></i>
<a name='L99'><i><font color='green'>// int exit_code 任务执行停止的退出码,其父进程会取。</font></i>
<a name='L100'><i><font color='green'>// unsigned long start_code 代码段地址。</font></i>
<a name='L101'><i><font color='green'>// unsigned long end_code 代码长度(字节数)。</font></i>
<a name='L102'><i><font color='green'>// unsigned long end_data 代码长度 + 数据长度(字节数)。</font></i>
<a name='L103'><i><font color='green'>// unsigned long brk 总长度(字节数)。</font></i>
<a name='L104'><i><font color='green'>// unsigned long start_stack 堆栈段地址。</font></i>
<a name='L105'><i><font color='green'>// long pid 进程标识号(进程号)。</font></i>
<a name='L106'><i><font color='green'>// long father 父进程号。</font></i>
<a name='L107'><i><font color='green'>// long pgrp 父进程组号。</font></i>
<a name='L108'><i><font color='green'>// long session 会话号。</font></i>
<a name='L109'><i><font color='green'>// long leader 会话首领。</font></i>
<a name='L110'><i><font color='green'>// unsigned short uid 用户标识号(用户id)。</font></i>
<a name='L111'><i><font color='green'>// unsigned short euid 有效用户id。</font></i>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?