程序是如何运行的

说来也是惭愧,写了好多年程序了,也没搞懂程序到底是如何运行的,有时候就疑问:

  1. 对于CPU来说,在不停的一条条执行指令,那它是怎么实现各个程序进程切换的?
  2. 提到进程这又是操作系统里的概念,对于单核CPU来说,它又怎么知道什么时候运行的操作系统,什么时候运行的是应用程序?
  3. 单核CPU运行应用程序时肯定是无法运行操作系统的,那操作系统又是如何将其挂起,切换其他进程执行呢?

本文陆续将整理一些理解感悟。

        首先可以肯定的是:对于单核CPU执行指令而言,它只是在机械地顺序的一条条执行指令,指令是其运行的基本单位,从指令角度而言是无法区分出执行的到底是哪个逻辑程序,是操作系统还是应用程序。同一时刻CPU只能执行一条指令。那通常所说的多任务执行又是怎么回事呢?

        这个要从计算机的体系结构说起,通用计算机系统包括CPU、内存、输入/输出等模块。早期的计算机只有单核CPU,当时只能一个程序执行完接着执行下一个程序。问题来了:

  1. 这意味着不能同时服务多个用户,只能一个用户服务完之后,接着服务下一个用户,需要大家依次排队。体验上不是很好。
  2. 假如一个用户的程序要执行三天三夜,霸占CPU不放,其他用户就只能一直等待。

这个时候就有人提出了分时操作系统概念,由一个操作系统负责管理资源分配,采用时间片轮转的方式,在一小片时间(每一小片时间极短,linux是5ms-800ms)执行某个程序,然后接下来执行另一个程序,如此不停轮转,实现:

  1. 多个用户的程序都能够得到很快的得到执行,解决了资源公平分配的问题
  2. 多个用户的

,普通用户几乎无法感知到,都以为自己是独享CPU执行,这就实现了所谓的“同时”执行多个程序的目的。

       既然是多个用户同时在使用CPU,会不会有用户一直霸占CPU。(未完待续)

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>