您的位置:首页 > 其它

操作系统学习基础-进程和线程

2014-11-04 21:23 337 查看
父进程和子进程:

当一个程序执行的时候实际上就是一个进程的执行,进程可以创建子进程,每个进程都有一个描述表,用于描述进程,子进程会对父进程的代码和数据,堆栈进行一个拷贝。然后跟父进程进行并发执行,这个时候,无论是父进程还是子进程都是独立执行,只是父进程可以通过创建子进程的时候返回的子进程的进程标识符(PID)对子进程进行操作。特别需要注意的是子进程和父进程之间不能通过引用相同地址上的变量来进行通信。在UNIX中,两个进程唯一可以共享引用的是打开的文件。在子进程创建后,子进程和父进程都可以使用处理器。他们有各自的虚拟机。在单处理器机器上,某一时刻只允许一个进程使用处理器。操作系统也可能选择其他进程运行。而在windows系统中,成功创建新进程后,会返回一个子进程的句柄和子进程中基线程的句柄。

进程和线程:

进程是程序执行的入口,而线程是程序支持的途径,进程表示程序开始执行,但是怎么执行,通过什么方法执行,这个时候需要线程来完成,就像是需要将东西运到目的地,需要辆卡车,多条道路一样,来寻求一个时空平衡。进程创建好之后,必须要创建一个基线程来执行,这个时候可以创建多线程,也就是说进程必须要创建一个进程来执行进程。真正完成代码执行的是线程,而进程只是线程的容器,或者说是线程执行的环境。当创建一个进程时,操作系统会自动创建这个进程的第一个线程,称为主线程。也就是执行main函数或winmain函数的此案曾,可以把main函数和winmain函数看作是主线程的进入点函数。此后,主线程可以穿件其他线程。在创建控制台的时候其实就已经创建了一个进程,并且伴随着创建了一个主线程,只是这个线程的入口函数是main函数或者winmain函数。需要注意的一点是,当主线程退出的时候会预示着进程的结束,这个时候其他线程也会结束。

经典进程和现代进程:

经典进程表示进程独占资源,每一个进程中有且只有一个基线程来完成程序的执行部分。虽然可以多个进程并发执行。

现代进程表示虚拟机中一个进程中可以有多个线程进行执行。UNIX系统被成为经典进程,Windows称为现代进程。但是现在有些版本的UNIX系统也对现代进程实现了完美的支持。

无论是经典进程还是现代进程,对操作系统而言都是一样的,操作系统会为每个进程创建一个虚拟机。不同的是,经典线程和现代进程对虚拟机操作不同,一个是单线程,一个是多线程支持。

总结:在现代操作系统中,应用程序员使用的是虚拟机,,它由进程,线程,文件,和其他资源组成。进程定义了执行引擎使用的计算机基础设施。线程(执行引擎)是表示程序执行的基本计算单元,。文件是稳定的信息容器,用于将上次过程的信息保存起来以备下次使用。所有操作系统都提供了对文件的支持。其他资源包括处理器,内存,设备,以及可以由进程从操作系统中请求到的任何其他东西。资源(如文件)是操作系统控制的对象,是进程执行之前需要得到的。进程中的线程共享程序和用于支持支持执行的资源,以及操作的数据。在UNIX中,操作系统管理的基本计算单元是进程,基本的辅存单元是文件。在windows中,每一个计算都以线程和进程的方式来组织。

关于对象,在操作系统执行程序的过程中,可以把程序当成一个对象,当一个线程在执行程序过程中,会创建这个程序的对象(在核心空间),并创建一个对象的句柄(在进程地址空间),然后将句柄返回给调用线程。而当另外一个线程需要使用这个对象的句柄的时候,首先这个线程也会试着去复制上述过程,先创建一个对象,然后返回对象句柄。而当这个线程试图创建已经存在的对象时,对象管理器会注意到对象已经存在了,所以它为第二个线程再创建一个句柄来访问存在的NT执行体对象。这两个线程共享同一个对象,对象管理器会保持执行体对象的访问计数。当所有的句柄被关闭时,执行体对象才被释放。这意味着只要线程不再需要句柄,应该关闭打开的句柄。

虚拟存储管理器,其实在进行内存分配的时候,是先在虚拟存储空间中进行的,如果是32位的话就是4G,这个空间是不存在的,只有当进程需要使用虚拟地址来存储信息时,它就提交地址空间,意味着系统存储空间会被分配给进程来保存信息。通常情况下,提交操作会引起磁盘上的空间(在进程的页文件中),被分配给进程,信息被存储在磁盘上直到它被一个线程实际访问。

可以利用互斥对象实现线程同步,可以把互斥对象堪称是一把房间钥匙,只有得到这把钥匙后,我们才能进入这个房间,完成应做的工作。当我们进入房间关上门后,因为钥匙在我们手中,其他人拿不到该钥匙,因此就无法进入这个房间,只能等待。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: