天天3分钟操做系统修炼秘籍(22):程序如何变成进程

点我查看秘籍连载编程

进程基础

程序和进程

什么是程序?什么是进程?程序和进程之间的关系?相信在任何介绍进程基础的地方都会解释一下程序和进程之间的关系,这是一个常识性的知识。数据结构

单独来看程序和进程,它们的概念都很是的简单。粗略去看,程序是一个或多个文件,进程是操做系统上能作某些事情的东西。函数

更标准一点,程序是由编程人员编码好的一个或多个文件,换句话说,程序是由源代码组成的静态的文件,里面定义了这个程序要作什么事,实现什么功能。可是它仅仅只是定义了这些要作的事情以及要实现的功能,并无去作这些事情。只有当程序在操做系统上运行起来以后产生了进程,才会由进程去作这些事情。因此,进程是程序在操做系统上运行以后产生的,是程序动起来以后的一个实例,所以也能够将进程看做是“运行中的程序”。编码

因此,程序自身只是包含了一些指令和一些静态数据,静止地躺在磁盘里的某个位置,它是无生命无灵魂的。当开始执行程序后,操做系统负责将程序源代码装载到内存中,使其动起来,赋予了它的灵魂和生命,它将所以变得有意义。操作系统

程序如何变成进程

静止的程序究竟是怎么转换成运行的进程的?OS是如何让程序运行起来的?进程是如何建立并工做的?这是几个让人疑惑又想窥得究竟的问题。blog

早期一些操做系统,会一次性将程序全部相关代码和数据装载到内存,而现代的操做系统是lazy模式装载,只在程序的执行过程当中须要某段代码时,临时去装载。进程

当代码和静态数据已经装载到内存后,OS还须要为将要运行的程序作一些额外的操做,好比为该进程分配一些内存;建立一些数据结构;初始化与IO相关的一些任务(好比Unix系统中,设置好每一个进程都关联的3个文件描述符:stdout、stdin、stderr),等等。内存

当完成了这些操做后,程序开始执行。由于程序的执行要从main()函数(程序的入口,即便是非C程序,也必定有一个入口函数)开始,因此须要先跳转到main()函数,而后OS将CPU控制权交给新建立的进程,进程获取到CPU后就能够执行了。get

相关文章
相关标签/搜索