Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1216283
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4004
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-20 08:27
文章分类
文章存档

2016年(1)

2015年(21)

2014年(100)

分类: LINUX

2014-02-20 15:01:20


=============================================================
 Linux中终端的相关概念
=============================================================

 

-------------------------------------------------------------
1 控制台:能显示能输入进行控制,
-------------------------------------------------------------


1.1 /dev/console:
控制台,物理设备,可以是本地显示器,也可以是串口设备
究竟指向何总设备由内核控制,在grub参数中,传递console参数给内核,最后一个console参数的值作为系统的控制台(设置为/dev/console的值,)。
kernel /boot/vmlinuz-2.4.17 ro root=/dev/sda3 console=ttyS0 console=tty0
指定两个控制台,串口或者显示器。 


1.1.1 /dev/ttyS*:
串口类型的终端

1.1.2 /dev/tty0:
指向/dev/tty1-63中,被激活的那个虚拟控制台,也就是说/dev/tty0动态,指向tty1-63中的任意一个。

1.1.2.1 /dev/tty1-63:
显示器,在一个真实的控制台中虚拟出来的多个控制台,

1.2 /dev/pts/*:
虚拟终端,和console与ttyS不同,并不是真实的硬件设备,而是用软件虚拟出来的。

1.1 前面这些终端都可以是/dev/tty:
控制终端,统称各种类型的终端设备


-------------------------------------------------------------
2 相关概念
-------------------------------------------------------------

从概念上讲terminal的范围比console要广,
console属于terminal,但terminal并一定是console。
terminal可以是进程的控制终端,也可以是系统的控制终端(就是系统在初始化时,还未打开/dev/tty等设备时使用的输入输出设备)

2.1 tty:进程控制台,和进程相关,和进程相关联的终端就是进程的控制终端。
终端:terminal,,其实是处于用户使用系统的角度来说的,相对于提供服务的系统终端是用户使用这个系统的入口

2.2 console:系统控制台, 和系统相关,主要应该由内核使用(没有终端的进程输出到什么地方?),更强调是控制系统的地方,其使用者主要是管理员

     The system console is the device which receives all kernel messagesand warnings and which allows logins in single user mode

2.3 虚拟终端

2.3.1 the device used to interact with a physical terminal(如果物理设备是串口,是否有虚拟终端)

2.3.2 tty0-tty63

2.3.3 pts


-------------------------------------------------------------
3 内核参数console
-------------------------------------------------------------


3.1 kernel /boot/vmlinuz-2.4.17 ro root=/dev/sda3 console=ttyS0 console=tty0

3.2 对printk的影响

3.2.1 printk在打印时,会遍历驱动列表,列表中的所有驱动的设备都会打印。内核在处理console这个参数时,应该是会把这些设备加入到这个列表中的。

3.3 对init进程打印的影响

3.3.1 在执行init进程前,会先打开/dev/console设备,作为进程的输入输出设备。然后再exec init进程,所以init进程的打印是由/dev/console输出的,这个值是最后一个
console参数决定,所以init进程的输出将只出现在最后一个console上,这个console叫做主控制台。所以在系统启动时的消息(由init输出)只显示在主控制台上

3.4 对普通进程打印的影响

内核初始化结束后打开”/sbin/init”进程前,会打开控制台终端设备/dev/console作为输入输出运行/sbin/init./dev/console的设备号是0x0501在打开时被定向到命令行(console=)指定的终端设备,缺少情况下是/dev/tty1,其设备号为0x0401.init程序完成用户初始化启动若干终端守护程序getty.getty在打开所守护的终端文件之前先使用setsid()创建会话组并成为会话组的首领进程(leader=1),首领进程的会话号(session)和进程组号(pgrp)等于进程号(pid).首领进程打开终端文件后成为终端的控制进程,其tty指针指向该终端打开的结构,该终端也成为本次会话的控制终端,其session号和pgrp号分别等于getty进程的session号和pgrp号.当用户从终端登录后,登录的bash程序替换getty进程成为首领进程。进程的会话号和组号随着进程的复制而传递,子进程的首领标志复位。bash在调用execve()执行用户程序之前将调用setpgid()为每一进程建立属于它自己的进程组(进程组号等于进程号),再对终端调用(TIOCSPGRP)将终端进程组号设置为新生成的进程号,使终端切换到新的进程组。终端进程组以外的进程组如果进行读操作将在其进程组中生成SIGTTIN信号,缺省的信号处理将使进程进入暂停。
3.4.1 无控制终端的:
也就是在init中启动的程序,在init执行终端守护进程之前执行的程序(比如/etc/rc.local中运行的程序)
都是继承init的输入输出,所以这些程序的打印应该只出现在主控制台上。

3.4.2 守护进程:
守护进程脱离终端,无需要终端

3.4.3 有控制终端的:
init进程在最后会以mgetty /dev/tty 的形式启动登录进程,这些进程会以传入的参数作为终端,
终端作为mgetty的控制终端,终端打印的信息在这里显示。从mgetty登录后,执行exec启动的bash
bash取代了mgetty成为会话首进程,mgetty的控制终端也变成了bash的控制终端。bash在调用execve()
执行用户程序之前将调用setpgid()为进程建立属于它自己的进程组(进程组号等于进程号),再对
终端调用(TIOCSPGRP),将终端进程组号设置为新生成的进程号,使终端切换到新的进程组。终端成为
新进程组的控制终端,规属这个进程组使用终端进程组以外的进程组如果进行读操作将在其进程组
中生成SIGTTIN信号,缺省的信号处理将使进程进入暂停。

 

阅读(1839) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~