[APUE]5588葡京线路进程关系(上)

一、终端登录

光网络

1. 4.3+BSD极端登录

  系统管理员成立一个一般名为/etc/ttys的文本,其中,每个终端设备有一行,每一行表明设备名和传唱getty程序的参数,这一个参数表达了顶峰的波特率。当系统bootstrap时根本创建过程ID
1,也就是init进程。init进程使系统进入多用户状态。init读文件/etc/ttys,对每一个允许登录的顶点设备,init调用两遍fork,它所生成的子进程则履行顺序getty。这种情状见下图:
  5588葡京线路 1

  图中每个过程的实在用户ID和有效率户ID都是0(即都有root权限)。init以空环境进行getty程序。
  getty对终端设备调用open函数,以读、写模式将终端打开。假若设备是调制解调器,则open可能会在装置驱动程序中滞留,直到用户拨号调制解调器,并且线路被连接。一旦装备被打开,则文件讲述符0、1、2就被装置到该装置。然后getty输出”login:”之类的信息,并听候用户键入用户名。假如终端协助多种速度,则getty可以测试特殊字符以便适当地改成终端速度(波特率)。
  当用户键入用户名后,getty就完成了,然后它以近乎于下列的方法调用login程序:

execle("/usr/bin/login", "login", "-p" username, (char *) 0, envp);

 
(在gettytab文件中恐怕会有一对选项使其调用其他程序,但系统默认是login程序)。init以一个空环境调用getty。getty以极端名(例如TERM=foo,其中终端foo的连串取自gettytab文件)和在gettytab中的环境字符串为login创建一个环境(envp参数)。-p标志公告login保留传给它的条件,也能够将此外环境字符串加到该环境中,可是不用替换它。下图体现了login刚被调用后这一个过程的情形。
  5588葡京线路 2

  因为前期的init进程具有root权限,所以图中持有进程都有root权限。图中底部两个过程的历程ID相同,因为经过ID不会因执行exec而变更。并且除了早期的init进程,所有的过程均有一个父进程ID。
  login能处理多项工作。因为它赢得了用户名,所以能调用getpwnam取得相应用户的口令文件登陆项。然后调用getpass以展示指示”Password:”接着读用户键入的口令。它调用crypt将用户键入的口令加密,并与该用户口令文件中登陆项的pw_passwd字段相比。即使用户几遍键入的口令都不算,则login以参数1调用exit表示登录过程战败。父进程(init)领悟到子进程的停止意况后,将又一次调用fork,其后又跟着执行getty,对此终端重复上述过程。
  假如用户正确登录,login就将当前工作目录更改为用户的home目录。它也调用chown改变该终端的所有权,使该用户成为所有者和组所有者。将对该终端设备的存取许可权改变成:用户读、写和组写。调用setgid及initgroup设置过程的组ID。然后调用login所收获的所有新闻初步化环境:起初目录(HOME)、shell(SHELL)、用户名(USER和LOGNAME),以及一个系统默认路径(PATH)。最后login进程改变为记名用户的用户ID(setuid)并调用该用户的登陆shell,其方法接近于:

execl("/bin/sh", "-sh", (char *) 0);

  argv[0]的首先个字符是一个标明,表示该shell被调用为报到shell。shell可以查看此字符,并相应地修改其启动过程
  login所做的比地点说的要多。
  到此截至,登录用户的报到shell开始运行。其父进程ID是init进程ID(进程ID
1),所以当此进程终止时,init进程会接收文告(接收到SIGGHLD信号),它会对该终端重复全部上述过程。登陆shell的文本讲述符0,1和2装置为终极设备。下图展示了那种安排。
  5588葡京线路 3

 

  现在登录shell读其启动文件。这么些启动文件一般改变一些环境变量,加上部分环境变量。当执行完启动文件后,用户最终得到shell的提拔符,并能键入命令。

OAN, Optical Access Network, 光纤接入网络

2. SVR4极端登录

  SVR4襄助二种方法的报到:(a)getty形式,这与地点的同样。(b)ttymon登录,这是SVR4的一种新效用。通常getty用于控制台,ttymon则用来此外终端的记名。

PON, Passive Optical Network, 无源光网络

二、网络签到

AON, Active Optical Network, 有源光网络

1. 4.3+BSD网络签到

5588葡京线路,  终端登录时,init知道咋样终端设备可用来报到,并为每一个设施生成一个getty进程。然则网络签到都经过基本的网络界面驱动程序,事先并不知道有稍许个如此的登录。不是使一个进程等待每一个或者的报到,而是必须等待一个网络连接请求的抵达。在4.3+BSD中,有一个名为inetd的长河,它等待大多数网络连接。
  作为系统启动的一片段,init调用一个shell,使其推行shell脚本stc/rc。由此shell脚本启动一个敏锐进程inetd。一旦此shell脚本终止,inetd的父进程就改为init。inetd等待TCP/IP连接请求到达主机,而当一个连续请求到达时,它实施五次fork,然后该子进程执行适当的次序。
  我们只要到达了一个对于TELNET服务器的TCP连接请求。TELNET是运用TCP协议的长距离登录应用程序。在另一个主机上的用户,或在同一个主机上的用户启动TELNET客户端进程启动登录过程:

telnet hostname

  该客户端进程打开一个到名为hostname的主机的TCP连接,在hostname主机上启动的程序被称呼TELNET服务器。然后客户端进程和服务器进程之间采用TELNET应用协议通过TCP连接交流数据。所暴发的是启动客户端进程的用户现在登录到了服务器进程所在的主机。下图显示了在推行TELNET服务器进程(称为telnetd)中所涉及的长河连串。
  5588葡京线路 4

  然后telnetd进程打开一个伪终端设备,并用fork生成一个子进程。父进程处理通过网络连接的通信,子进程则执行login程序。父、子进程经过伪终端相连接。在调用exec在此以前,子进程使其文件讲述符0,1,2与伪终端相连。假如登录正确,login就推行:更改当前工作目录为起先目录,设置签到用户的组ID和用户ID,以及登录用户的胚胎环境。然后login用exec将其自我替换为报到用户的登录shell。下图体现了到达这或多或少时的过程安排
  5588葡京线路 5

  当通过极端或网络签到时,我们获取一个记名shell,其标准输入、输出和业内出错连接到一个极限或者伪终端设备上。

OLT, Optical Line Terminal, 光线路终端

2. SVR4网络签到

  SVR4中网络签到的气象与4.3+BSD中的几乎一样。同样使用了inetd服务器进程,可是在SVR4中inetd是作为一种服务存取控制器sac调用的,其父进程不是init。最终拿到的结果与上图一律。

*  未来自用户端的信号按照工作项目分别送入各类工作网中;*

三、进程组

  每个过程除了有一过程ID之外,还属于一个进程组,进程组是一个或六个经过的聚合,每个过程组有一个唯一的长河组ID。进程组ID类似进程ID,它是一个正整数,并可存放在pid_t数据类型中。函数getpgrp再次回到调用进程的历程组ID

#include <sys/types.h>
#include <unistd.h>

pid_t getpgrp(void);
返回值: 调用进程的进程组ID

  每个过程组都有一个COO进程。经理进程的标识是:其经过组ID等于其过程ID。
  进程组老董可以创制一个经过组,创造该组中的进程,然后终止。只要在某个进程组中有一个过程存在,该过程组就存在,与经过老板是否终止无关。从过程组成立到内部最后一个历程终离开(该过程能够告一段落也足以出席另一个进程组)的年月距离称为进程组的生命期。
  进程调用setpgid可以参加一个留存的组或者创造一个新进程组

#include <sys/types.h>
#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);
返回值: 若成功则为0,出错为-1

  这将pid进程的长河组ID设置为pgid。倘诺这六个参数相等,则由pid指定的过程变成进程组首席执行官。
  一个历程只好为它自己或它的子进程设置过程组ID。在它的子进程调用了exec后,它就不再改变该子进程的过程组ID
  倘使pid是0,则利用调用者的历程ID。假如pgid是0,则由pid指定的长河ID被用作为进程组ID。
  倘诺系统不扶助作业控制,那么就不定义_POSIX_JOB_CONTROL,在这种情状下,该函数再次回到错误,errno设置为ENOSYS。
  在大部作业控制shell中,在fork之后调用此函数,使父进程设置其子进程的过程组ID,然后使子进程设置其协调的进程组ID。这一个调用中有一个是冗余的,但如此做可以确保父、子进程在进一步操作在此以前,子进程都进入了该进程组。假使不这么做的话,那么就发生一个竟态条件,因为它借助于哪一个经过先实施。

*  将来自局端的信号送入接入网络以便向客户端传输;*

四、对话期

  对话期(session)是一个或两个过程组的集结。例如,可以有下图中所示的布局。在一个会话期中有六个进程组。通常由shell的管道线将多少个经过作出一组的。例如下图中的安排可能是由下列模式的shell命令形成的:

proc1 | proc2 &
proc3 | proc4 | proc5

  5588葡京线路 6

  进程调用setsid函数就足以创建一个新对话期。

#include <sys/types.h>
#include <unistd.h>

pid_t setsid(void);
返回值:若成功则为进程组ID,若出错则为-1

  如若调用此函数的长河不是一个过程组的总监,则此函数创制一个新对话期,结果为:

  1. 此过程变成该新对话期的对话期的首进程(session leader,
    对话期首进程是创设该对话期的过程)。此过程是该新对话期中的唯一进程。
  2. 此过程成为一个新进程组的老板进程。新历程组ID是此调用进程的长河ID。
  3. 此过程没有控制终端。假使在调用setsid在此之前此过程有一个操纵终端,那么这种交流也被免去。

  就算此调用进程一度是一个历程组的老董,则此函数重回出错。为了保证不处在那种场所,平时先调用fork,然后使父进程终止,而子进程则继续。因为子进程继续了父进程的历程组ID,所以其不容许是进程组首席执行官。

ODN, Optical Distribution Network, 光配线网络/分光器

ONU, Optical Network Unit, 光网络单元(如路由器/交流机)

*  面向高端用户为主的
FTTB等,称为MDU(LAN)型ONU,一般几户到几十户公用一个ONU终端,用户数量通过FE口上行;*

*  5588葡京线路 7*

    图1 FTTB ONU: EONU16160

*  面向一般用户为主的
FTTC等,称为MDU(DSL)型ONU,一般几十户到几百户公用一个ONU终端,用户数量通过电缆线上行;*

 

分类

OAN采用光纤传输技术的接入网,即地面交流和用户之间一切或部分都是行使光纤传输的通信系统;

1.基于OLT和ONU之间的ODN光配线网络 是不是留存有源电子装备,OAN可以分成:

  1)PON,无源光网络

  2)AON,有源光网络

  PON网络是一种纯介质网络,由于不存在有源器件,所以可以避免由于外部设备的电磁烦扰和雷电影响,减小线路和外部设备的故障率,提升系统稳定的还要也可以节省珍爱资金。

2.根据ONU在光接入网具体地方不同,OAN可以分成:

  1)FTTCab,光纤到交流箱

  2)FTTCub,光纤到路边

  3)FTTB,Fiber To The Building,光纤到楼堂馆所

  4)FTTH,Fiber To The Home,光纤到家

  5)FTTO,Fiber To The Office,光纤到办公

 

PON网络

  5588葡京线路 8

      图2  PON网络的中坚拓扑结构

  1.PON网络下行

  5588葡京线路 9

      图3 PON下行

  * PON下行广播模式;

   PON下行时,所有ONU接入,系统可以对ONU举办表达,MAC地址;

   对于给特定ONU的数据帧,其他的ONU在物理层上,也会收取数额,收到之后会相比较LLID(数据帧头部)是不是温馨的,假如不是一向丢掉,在芯片层实现;

   对于每一对ONU-OLT,可以启动128位的AES加密,各种ONU的密钥不同;

   VLAN隔离,通过VLAN情势,可以将不同的用户群/不同的业务范围在不同的VLAN,保证相互之间数据音信隔离;

2.PON网络上行

  5588葡京线路 10

      图4 PON上行

  *PON上行采用TDMA时分复用情势,把光纤的占据按一定时间长短(16ns*n)分成若干时刻,每一个时光,只有以太ONU可以占据光纤向OLT发送数据,另外ONU关闭激光器Laser,OLT通过发送控制数据包制定ONU发送数据的时段。