当前位置: 首页 > 互联网 > 正文

Unix线程管理

线程定义:A process is an execution process of a program. 线程一个程序的执行过程。多道程序设计(Multiprogramming)不仅允许处理器一段时间同时处理一批作业,还常常处理多重的作业交互。这就是多进程并发运行(multiple processes’ running concurrently)。在分时(time-sharing)操作系统中,处理器时间由多个用户共享,每个用户程序都在一个很短的时间进行轮转计算。这个很短的执行时间段,我们称之为时间片(burst,quantum,time slice)。进程有其自身的生命周期,从Unix创建其开始,到其从系统中删除为止。用户执行外部命令(external command)或程序时,Unix为其创建一个线程去执行,一旦执行完成,线程就会被删除。

调度和调度算法:

  • FCFS(fist-come first served):先来先服务。
  • round-robin(RR) scheduling algorithm:轮循调度算法。此算法假定系统中所有的线程同等重要。
  • priority scheduling algorithm:优先级算法。

Unix调度算法和上下文切换(context switch)

两个等级:低级算法(low-level algorithm),调度内存中的已准备好的线程。
高级算法(high-level algorithm),调度哪个线程从磁盘进入内存,准备执行。
优先级值:低级算法有多个等代队列,每个队列都有与之对应的优先级值。负值有最高的优秀级,正值越大,优先级越低。
相同优秀级的的各个进程采用基于FCFS和轮循调度算法。优先级值计算工式:priority = base + nice + CPU_usage;base是一个范围在40到60的整型值;nice通常是正值,默认是0,范围从-20到20的整型值;CPU_usage:线程已使用CPU的时钟(clock ticks)数量。

进程上下文(context of process)

三个组成:硬件寄存器上下文(程序计数器,处理器状态寄存器,栈指针,通用目标寄存器);用户级上下文(指令代码,数据,用户栈,进程共享内存空间);系统级上下(静态:PCB结构,虚拟内存;动态:进程进入和退出不同的上下文层次,保存和恢复的记录)。

进程状态:5个状态:running(运行),ready(就绪),blocked(阻塞),created(新创建),teminated(终止).

Unix进程状态:8个状态:Created(新创建);Ready in Memory(活跃就绪);Kernel Running(核心态运行); User Running(用户态运行);Sleeping,in Memory(活跃阻塞);Sleeping,Swapped(静止挂起);Ready,Swapped(静止就绪);Zombie(销毁).

进程的属性:从用户的角度来看:

  • PID:进程ID,进程标识
  • S:进程状态
  • UID:用户ID
  • PPID:进程对应的父进程ID
  • C:CPU Usage,
  • PRI:优先级值
  • NI:Nice value优秀值
  • ADDR:address,进程的内存地址或磁盘地址
  • WCHAN:wait channel:等待通道
  • TT:Terminal:终端名称
  • TIME:进程除去阻塞或停止后的运行(running)时间
  • CMD:命令,发起进程的命令

掌握下列关于进程及作业的相关命令:

  • bg: putting process in background, syntax: $ bg [% job[s]]
  • fg: bringing process to foreground, syntax: $ fg [% job[s]]
  • jobs: displaying status of processes in background or foreground, syntax: $ jobs [option(s)] [% job[s]]
  • &: &加在命令之后,表示将此进程放在background运行。
  • 进程的并发(concurrently)执行:$ command1 & command2 & command 3 & …
  • 进程的顺序(sequentially)执行:$ command1 ; command2 ; command 3 ; …
  • 进程的分组(grouped)执行: $ (command1 ; command2 ; command 3 ; …)

Unix进程的的内部通信:

三种方式:Messages(消息),Shared memory(共享内存),Semaphore(信号量)

Unix Signals:

进程的终止:kill命令。

  • 终止前台进程:CTRL-C,按控制键加C;
  • 终止后台进程:将进程转到前台(fg),然后用终止前台进程方法终止进程;
  • 终止后台进程:找到后台进程的PID或都Job号码,用kill命令杀死进程。

等待命令:sleep sec; 举例:$ (sleep 900; echo “wake up!”) &

忽略挂起信号(ingoring hangup signal) syntax: $ nohup command(s) 意义:当用户要退出系统时,仍保证这些命令继续执行,而不被挂起。举例:$ nohup sort encyclopedia > encyclopedia.st &

守护进程(daemons)

Unix进程分为三组:用户进程(user processes),守护进程(daemon processes),内核进程(kernel processes)

  • user processes: related to users at terminals.
  • deamon processes: not belong to any users,是系统的基石。比如printer spooling,网络控制与管理,有些守护进程存在在系统的整个生命周期,或以被其它用户进程调用。
  • kernel processes:同样提供系统服务,不需要系统调用,直接控制和访问内核算法,数据结构。内核进程没有守护进程灵活,如果要修改,Unix内核改变需要重新编译。

Unix系统启动和初始进程:

Unix有两个独一无二的进程:进程0,和进程1。系统启动时,创建进程0;进程0创建进程1;系统中所有其它进程由进程1创建。

学习Unix操作系统进程管理的相关笔记及记录。

本文固定链接: http://www.byhard.com/?p=716 | 海纳百川

该日志由 byhard 于2012年09月16日发表在 互联网 分类下,
原创文章转载请注明: Unix线程管理 | 海纳百川
关键字:

Unix线程管理:目前有13 条留言

  1. 10楼
    笑话据点:

    多更新,要不然还以为您老人家去保卫钓鱼岛了呢

    2012-09-17 11:14
    • byhard:

      保钓,必须地。

      2012-09-17 12:56
  2. 不太懂。很专业

    2012-09-17 11:32
  3. 多线程,果断收藏

    2012-09-17 13:40
  4. 术语很专业性,看的很吃力。

    2012-09-17 14:30
  5. 不错,跟着学习下!

    2012-09-17 15:08
  6. 以前上这个课老是睡觉,呵呵~

    2012-09-17 15:32
  7. 来给学习学习了 。

    2012-09-17 18:34
  8. 地板
    旅行士吧:

    现在这是很专业的知识

    2012-09-17 20:22
    • byhard:

      嗯,计算机的专业课呢。

      2012-09-18 06:58
  9. 板凳
    hiswing:

    操作系统原理,温习一下。

    2012-09-18 14:51
    • byhard:

      嗯,理论的东西越学越有味道。

      2012-09-19 13:31
  10. 恩 不错!

    2012-09-18 16:24