FreeBSD系统编程(3)

2009-05-13 12:47:25来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

第三章: 进程和内核服务
译者:孙轩@chinaunix.net
该章节的例程:
http://www.khmere.com/freebsd_book/src/03/index.html
3.1 进程和内核服务
process:一系列用于实现目标的行为和操作;特别指:制造中指定的连续的工作和处理。
  前面的章节有提到BSD系统的启动过程。现在让我们看看一旦内核被导入并运行会发生什么。像大部分其他的现代操作系统,BSD是一个多用户多任务操作系统,这意味着它支持多用户运行不同的多进程来使用系统资源。进程的概念提出了一个对操作系统管理的所有活动的有力的提取。这个概念作为在多道程序设计环境中面向工作的一个特定术语是在19世纪60年代由Multics(一个失败的分时系统计划)的设计者提出的。
3.2 调度
  一个进程是一个运行程序的单独实例。例如,当你在BSD系统中运行Netscape,它将在被运行时创建一个进程。
如果有3个用户登陆BSD系统并全部同时运行相同的Netscape程序,每一个用户将拥有区别于其他用户的自己的
Netscape实例。BSD系统可以支持同时多个这样的进程。每一个进程将和一个进程标志号(PID)关联。这些进程
需要资源并且可能不得不使用一些设备比如外部存储。
  当多个程序在一个系统上运行的时候,操作系统操控出他们都在运行的假象。操作系统特定的调度算法将管理
程序的优先权指派。该领域的计算科学是广阔的,和十分专业的。更多的信息请看资源章节。
  操作系统实际上将运行的多进程不断调入或调出CPU(s),通过这种方法,每个进程得到一段特定的CPU(s)运行
时间。这段时间被叫做时间片。时间片的长短基本上由内核的调度算法决定。该算法有一个可以调整的值叫‘nice’,它提供给进程修改运行优先权的程序能力。这些优先权的值如下:
      Nice values                Priority
        -20    - 0            Higher priority for execution
         0      - 20          Lower priority for execution
      
注意:一个高的nice值导致低的运行级别,这可能看上去有点怪异。然而,考虑到下面这个计算:
(scheduling algo calculation) + (nice value)
这个简单的算术表明:添加一个负值到一个正值将得到一个较小的数,而当这些数被排序的时候,较小的数将排在
运行队列的前面。
所有进程默认的nice值是0,运行的进程可以提高自己的nice值(就是降低自己的优先权),但是只有以root运行的
进程可以降低nice(就是提高优先权)。BSD系列提供了两个基本的借口用于改变和获得这些值。它们是:

int getpriority(int which, int who);
int setpriority(int which, int who, int prio);和

int nice(int incr);nice函数会把调用它的进程的nice值设置成传给它的参数incr的值。可以看到nice函数是比较不好用的,因为它不是
十分灵活,实际上nice函数不过是对前两个函数的封装。首选的方法是使用setpriority()。
因为可能的的优先权值可以为-1,所以getpriority的返回值不能作为程序运行成功与否的判断,而应该检查errno(错误号)是否被设置。因此在调用getpriority的时候要清空该值(errno)。(更多的关于使用errno信息,可以使用man(2)察看关于erron的页面和读例程:
http://www.khmere.com/freebsd_book/src/03/nice_code.c.html

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: FreeBSD系统编程(2)

下一篇: FreeBSD系统编程(4)