? 一直以来都想写一些自己对操作系统的思考,那么就从这里开始吧。
? 接下来,我们才什么是程序出发,经过对linux中线程与进程的讨论最后结束。
??什么是程序呢?QQ是一个程序,微信是一个程序,王者荣耀是一个程序。所有的这些程序都是可以在我们的计算机上运行并且拥有一定的功能(QQ可以聊天,王者荣耀可以让我们play game)。我们给这些程序下一个定义(definition)那就是软件(software)。
??所有我们的第一个问题解决了,程序就是软件(software)。
??ps::今天我看了看考研的书,发现书上说程序是一个静态的概念。
??有很多人会说程序不就是存储在计算机内部吗?
??但是计算机的存储是分类的,也就是说对于不同的数据(data)存储在不同的位置。
? 看下面这张图片
? 这是一张计算机存储体系图(Computer Storage system)。
??关于这张图有两个规则:
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.从上到下计算机访问存储器的速度逐渐变慢。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.从上到下存储器的容量逐渐变大。
??在文章中我们只需要关注两个存储层次,内存,辅存。
??辅存就是我们经常说的磁盘或者固态硬盘,特点是存储容量大,访问速度慢。而我们的程序在计算机中不过是一些二进制代码,在没有运行起来的时候需要一些存储空间去存放,存放在哪里呢?当然是磁盘中,磁盘容量大代表可以存放很多的二进制代码。然而还有一个我们没有提到,那就是内存。
??辅存是我们存放程序代码的位置,但是由于访问速度太慢,所有如果我们在程序运行时把程序放在辅存中的话,那么我们在程序运行时的大部分时间都是在等待CPU访问辅存,这显然是不科学的,没有人会乐意看到自己仅仅是在word中输入一个字符却要等待10秒。所有内存的概念就产生了,为了提高计算机的访问速度。
??还记得我们的第一条规则吗?? 1.从上到下计算机访问存储器的速度逐渐变慢。那么访问内存的速度是要大于访问磁盘的速度的。那么我们把在内存中运行的程序(正在运行的)叫做进程(process)。
??注意:在继续观看只前确保你理解了一下两个概念:
???1.程序是一些二进制码,而进程代表运行的程序。
?? 2.程序存放在辅存中,而进程存放在内存中。
ps::进程是程序运行的实体,是一个动态的概念。
??经过上面的讨论我们知道了进程是运行的程序。那我们来讨论一下具体什么是进程。
??????? ?在你打开你的电脑之后,首先第一个运行起来的是操作系统,此时是电脑中只有一个进程,那就是操作系统,当你点击QQ,或者微信,此时电脑中就多了一个进程(process)正在运行,这就是进程。
??????? ?那么进程运行在哪里呢?由于进程运行时要与CPU就行交互所有那么自然希望运行的越快越好,所以根据计算机存储体系,那么自然是存储在内存中。由操作系统负责调度进程(有许多的调度算法,这个我们下期再说),管理进程。
??进程的概念起源于多道程序设计,什么是多道程序设计呢?
?
解释一下,也就是说,一台计算机的内存中同时运行了多个程序。而为了有效的管理这多个程序,便定义了进程这个概念,用进程代表运行的程序。进程中记录了程序运行的信息,方便操作系统进行管理和调度(如进程运行优先级,进程的当前状态..)
3.线程
??线程是轻量级的进程。一个进程代表的是一个程序,由PCB,代码段,数据段组成。PCB(Process Control Block)进程控制块,记录了进程运行的信息,如进程运行优先级,进程的当前状态..;代码段,记录了程序的指令;数据段,记录了程序运行的数据(分为堆段和栈段)。如果每来一个任务,我们都创建一个进程进行处理(由于进程的内存消耗很大)那么就会导致系统内存不足。这就是线程的由来。
?? ? ? ? ?一个进程里包含多个线程
??线程通过共享进程的资源,来运行在同一个地址空间里(线程的资源消耗很少,只需要一点运行时必须的资源),实现在一个进程里执行多个任务。所以线程是运行在进程的地址空间上,通过共享进程的地址空间来执行任务。
??????? ? ??