⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 65.html

📁 linux 0.11中文版 有注释
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name='L77'>   <font color='red'>{</font>0, 0, 0, 0, ""<font color='red'>}</font>             <i><font color='green'>/* console secondary queue */</font></i><i><font color='green'>// tty 控制台辅助(第二)队列。</font></i>
<a name='L78'>   <font color='red'>}</font>, <font color='red'>{</font>
<a name='L79'>       <font color='red'>{</font>0,                      <i><font color='green'>/* no translation */</font></i><i><font color='green'>// 输入模式标志。0,无须转换。</font></i>
<a name='L80'>        0,                      <i><font color='green'>/* no translation */</font></i><i><font color='green'>// 输出模式标志。0,无须转换。</font></i>
<a name='L81'>        <a href='../S/48.html#L196' title='Defined at 196 in include/termios.h.'>B2400</a> | <a href='../S/48.html#L207' title='Defined at 207 in include/termios.h.'>CS8</a>,            <i><font color='green'>// 控制模式标志。波特率2400bps,8 位数据位。</font></i>
<a name='L82'>        0,                      <i><font color='green'>// 本地模式标志0。</font></i>
<a name='L83'>        0,                      <i><font color='green'>// 行规程0。</font></i>
<a name='L84'>        <a href='../S/38.html#L92' title='Defined at 92 in include/linux/tty.h.'>INIT_C_CC</a><font color='red'>}</font>,             <i><font color='green'>// 控制字符数组。</font></i>
<a name='L85'>       0,                       <i><font color='green'>// 所属初始进程组。</font></i>
<a name='L86'>       0,                       <i><font color='green'>// 初始停止标志。</font></i>
<a name='L87'>       <a href='../S/64.html#L80' title='Defined at 80 in kernel/chr_drv/serial.c.'>rs_write</a>,                <i><font color='green'>// 串口1 tty 写函数指针。</font></i>
<a name='L88'>       <font color='red'>{</font>0x3f8, 0, 0, 0, ""<font color='red'>}</font>,    <i><font color='green'>/* rs 1 */</font></i><i><font color='green'>// 串行终端1 读缓冲队列。</font></i>
<a name='L89'>       <font color='red'>{</font>0x3f8, 0, 0, 0, ""<font color='red'>}</font>,    <i><font color='green'>// 串行终端1 写缓冲队列。</font></i>
<a name='L90'>       <font color='red'>{</font>0, 0, 0, 0, ""<font color='red'>}</font>         <i><font color='green'>// 串行终端1 辅助缓冲队列。</font></i>
<a name='L91'>       <font color='red'>}</font>, <font color='red'>{</font>
<a name='L92'>           <font color='red'>{</font>0,                  <i><font color='green'>/* no translation */</font></i><i><font color='green'>// 输入模式标志。0,无须转换。</font></i>
<a name='L93'>            0,                  <i><font color='green'>/* no translation */</font></i><i><font color='green'>// 输出模式标志。0,无须转换。</font></i>
<a name='L94'>            <a href='../S/48.html#L196' title='Defined at 196 in include/termios.h.'>B2400</a> | <a href='../S/48.html#L207' title='Defined at 207 in include/termios.h.'>CS8</a>,        <i><font color='green'>// 控制模式标志。波特率2400bps,8 位数据位。</font></i>
<a name='L95'>            0,                  <i><font color='green'>// 本地模式标志0。</font></i>
<a name='L96'>            0,                  <i><font color='green'>// 行规程0。</font></i>
<a name='L97'>            <a href='../S/38.html#L92' title='Defined at 92 in include/linux/tty.h.'>INIT_C_CC</a><font color='red'>}</font>,         <i><font color='green'>// 控制字符数组。</font></i>
<a name='L98'>           0,                   <i><font color='green'>// 所属初始进程组。</font></i>
<a name='L99'>           0,                   <i><font color='green'>// 初始停止标志。</font></i>
<a name='L100'>           <a href='../S/64.html#L80' title='Defined at 80 in kernel/chr_drv/serial.c.'>rs_write</a>,            <i><font color='green'>// 串口2 tty 写函数指针。</font></i>
<a name='L101'>           <font color='red'>{</font>0x2f8, 0, 0, 0, ""<font color='red'>}</font>,        <i><font color='green'>/* rs 2 */</font></i><i><font color='green'>// 串行终端2 读缓冲队列。</font></i>
<a name='L102'>           <font color='red'>{</font>0x2f8, 0, 0, 0, ""<font color='red'>}</font>,        <i><font color='green'>// 串行终端2 写缓冲队列。</font></i>
<a name='L103'>           <font color='red'>{</font>0, 0, 0, 0, ""<font color='red'>}</font>     <i><font color='green'>// 串行终端2 辅助缓冲队列。</font></i>
<a name='L104'>           <font color='red'>}</font>
<a name='L105'><font color='red'>}</font>;
<a name='L106'>
<a name='L107'><i><font color='green'>/*</font></i>
<a name='L108'><i><font color='green'>* these are the tables used by the machine code handlers.</font></i>
<a name='L109'><i><font color='green'>* you can implement pseudo-tty's or something by changing</font></i>
<a name='L110'><i><font color='green'>* them. Currently not done.</font></i>
<a name='L111'><i><font color='green'>*/</font></i>
<a name='L112'><i><font color='green'>/*</font></i>
<a name='L113'><i><font color='green'>* 下面是汇编程序使用的缓冲队列地址表。通过修改你可以实现</font></i>
<a name='L114'><i><font color='green'>* 伪tty 终端或其它终端类型。目前还没有这样做。</font></i>
<a name='L115'><i><font color='green'>*/</font></i>
<a name='L116'><i><font color='green'>// tty 缓冲队列地址表。rs_io.s 汇编程序使用,用于取得读写缓冲队列地址。</font></i>
<a name='L117'><b>struct</b> tty_queue *table_list[] = <font color='red'>{</font>
<a name='L118'>  &amp;tty_table[0].read_q, &amp;tty_table[0].write_q,  <i><font color='green'>// 控制台终端读、写缓冲队列地址。</font></i>
<a name='L119'>  &amp;tty_table[1].read_q, &amp;tty_table[1].write_q,  <i><font color='green'>// 串行口1 终端读、写缓冲队列地址。</font></i>
<a name='L120'>  &amp;tty_table[2].read_q, &amp;tty_table[2].write_q   <i><font color='green'>// 串行口2 终端读、写缓冲队列地址。</font></i>
<a name='L121'><font color='red'>}</font>;
<a name='L122'>
<a name='L123'><i><font color='green'>//// tty 终端初始化函数。</font></i>
<a name='L124'><i><font color='green'>// 初始化串口终端和控制台终端。</font></i>
<a name='L125'><b>void</b>
<a name='L126'><a href='../R/711.html' title='Multiple refered from 2 places.'>tty_init</a> (<b>void</b>)
<a name='L127'><font color='red'>{</font>
<a name='L128'>  <a href='../S/64.html#L57' title='Defined at 57 in kernel/chr_drv/serial.c.'>rs_init</a> ();                   <i><font color='green'>// 初始化串行中断程序和串行接口1 和2。(serial.c, 37)</font></i>
<a name='L129'>  <a href='../S/60.html#L872' title='Defined at 872 in kernel/chr_drv/console.c.'>con_init</a> ();                  <i><font color='green'>// 初始化控制台终端。(console.c, 617)</font></i>
<a name='L130'><font color='red'>}</font>
<a name='L131'>
<a name='L132'><i><font color='green'>//// tty 键盘终端字符处理函数。</font></i>
<a name='L133'><i><font color='green'>// 参数:tty - 相应tty 终端结构指针;mask - 信号屏蔽位。</font></i>
<a name='L134'><b>void</b>
<a name='L135'><a href='../R/712.html' title='Multiple refered from 2 places.'>tty_intr</a> (<b>struct</b> tty_struct *tty, <b>int</b> mask)
<a name='L136'><font color='red'>{</font>
<a name='L137'>  <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>;
<a name='L138'>
<a name='L139'><i><font color='green'>// 如果tty 所属组号小于等于0,则退出。</font></i>
<a name='L140'>  <b>if</b> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;pgrp &lt;= 0)
<a name='L141'>    <b>return</b>;
<a name='L142'><i><font color='green'>// 扫描任务数组,向tty 相应组的所有任务发送指定的信号。</font></i>
<a name='L143'>  <b>for</b> (<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = 0; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> &lt; <a href='../S/36.html#L4' title='Defined at 4 in include/linux/sched.h.'>NR_TASKS</a>; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++)
<a name='L144'><i><font color='green'>// 如果该项任务指针不为空,并且其组号等于tty 组号,则设置该任务指定的信号mask。</font></i>
<a name='L145'>    <b>if</b> (task[<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>] &amp;&amp; task[<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>]-&gt;pgrp == <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;pgrp)
<a name='L146'>      task[<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>]-&gt;signal |= mask;
<a name='L147'><font color='red'>}</font>
<a name='L148'>
<a name='L149'><i><font color='green'>//// 如果队列缓冲区空则让进程进入可中断的睡眠状态。</font></i>
<a name='L150'><i><font color='green'>// 参数:queue - 指定队列的指针。</font></i>
<a name='L151'><i><font color='green'>// 进程在取队列缓冲区中字符时调用此函数。</font></i>
<a name='L152'><b>static</b> <b>void</b>
<a name='L153'><a href='../R/613.html' title='Multiple refered from 2 places.'>sleep_if_empty</a> (<b>struct</b> tty_queue *queue)
<a name='L154'><font color='red'>{</font>
<a name='L155'>  <a href='../S/25.html#L15' title='Defined at 15 in include/asm/system.h.'>cli</a> ();                       <i><font color='green'>// 关中断。</font></i>
<a name='L156'><i><font color='green'>// 若当前进程没有信号要处理并且指定的队列缓冲区空,则让进程进入可中断睡眠状态,并让</font></i>
<a name='L157'><i><font color='green'>// 队列的进程等待指针指向该进程。</font></i>
<a name='L158'>  <b>while</b> (!current-&gt;signal &amp;&amp; <a href='../S/38.html#L39' title='Defined at 39 in include/linux/tty.h.'>EMPTY</a> (*queue))
<a name='L159'>    <a href='../S/74.html#L242' title='Defined at 242 in kernel/sched.c.'>interruptible_sleep_on</a> (&amp;queue-&gt;proc_list);
<a name='L160'>  <a href='../S/25.html#L14' title='Defined at 14 in include/asm/system.h.'>sti</a> ();                       <i><font color='green'>// 开中断。</font></i>
<a name='L161'><font color='red'>}</font>
<a name='L162'>
<a name='L163'><i><font color='green'>//// 若队列缓冲区满则让进程进入可中断的睡眠状态。</font></i>
<a name='L164'><i><font color='green'>// 参数:queue - 指定队列的指针。</font></i>
<a name='L165'><i><font color='green'>// 进程在往队列缓冲区中写入时调用此函数。</font></i>
<a name='L166'><b>static</b> <b>void</b>
<a name='L167'><a href='../S/65.html#L453' title='Refered from 453 in kernel/chr_drv/tty_io.c.'>sleep_if_full</a> (<b>struct</b> tty_queue *queue)
<a name='L168'><font color='red'>{</font>
<a name='L169'><i><font color='green'>// 若队列缓冲区不满,则返回退出。</font></i>
<a name='L170'>  <b>if</b> (!<a href='../S/38.html#L45' title='Defined at 45 in include/linux/tty.h.'>FULL</a> (*queue))
<a name='L171'>    <b>return</b>;
<a name='L172'>  <a href='../S/25.html#L15' title='Defined at 15 in include/asm/system.h.'>cli</a> ();                       <i><font color='green'>// 关中断。</font></i>
<a name='L173'><i><font color='green'>// 如果进程没有信号需要处理并且队列缓冲区中空闲剩余区长度&lt;128,则让进程进入可中断睡眠状态,</font></i>
<a name='L174'><i><font color='green'>// 并让该队列的进程等待指针指向该进程。</font></i>
<a name='L175'>  <b>while</b> (!current-&gt;signal &amp;&amp; <a href='../D/215.html' title='Multiple defined in 2 places.'>LEFT</a> (*queue) &lt; 128)
<a name='L176'>    <a href='../S/74.html#L242' title='Defined at 242 in kernel/sched.c.'>interruptible_sleep_on</a> (&amp;queue-&gt;proc_list);
<a name='L177'>  <a href='../S/25.html#L14' title='Defined at 14 in include/asm/system.h.'>sti</a> ();                       <i><font color='green'>// 开中断。</font></i>
<a name='L178'><font color='red'>}</font>

⌨️ 快捷键说明

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