操作系统,程序,进程,线程的联系与区别

178 阅读4分钟

1/操作系统

<1>什么是操作系统

(1)操作系统是用户和计算机之间进行互动的桥梁,同时也是计算机硬件和其他软件的接口,实现了程序开发者与计算机硬件的“对话“机制. 
(2)简言之,操作系统,OperatingSystem,简称OS,
     是管理和控制计算机硬件资源与软件资源的计算机程序,
     是直接运行在“裸机”上的最基本的系统软件,
     任何其他软件都必须在操作系统的支持下才能运行。
   
(3)目前世界上比较流行的电脑操作系统有:
   windows os系列的操作系统(微软公司开发的,包括win95,win98,win7,win10)
   macos (苹果公司开发的)
   Linux
   chrome os (谷歌公司开发的)
  

<2> 操作系统的结构

  <1>操作系统主要可以分为两大部分:内核和内核之外的一些程序
  

<3> 操作系统的作用

  <1>进程管理(Processing management)
  <2>内存管理(Memory management)
  <3>文件系统(File system)就是磁盘管理
  <4>网络通讯(Networking)
  <5>安全机制(Security)
  <6>用户界面(User interface)
  <7>驱动程序(Device drivers

2/程序

<1>计算机中的程序
   一般的,计算机程序是指以某种程序设计语言编写,运行于某种目标结构体系上。
   程序可分为系统程序(驱动程序等)和应用程序(浏览器、办公软件等)
    
<2>应用程序与操作系统的关系
   应用程序可以通知操作系统执行某个具体的动作,以便使应用程序间接的通过OS对硬件操作。
   其实程序员只需要关注应用程序与操作系统的交互即可,对于操作系统是怎样控制硬件设备的只需大致了解即可
  
<3>简而言之,程序就是一个代码文件,比如aaa.py文件,程序是静态的。
   程序是静态的,是死的,你如果不执行它,它就啥也不是,只能静静地呆着。
  
  

3/进程

程序一旦运行起来就是进程了,是动态的。
进程是程序+用到的资源(cpu和内存,磁盘)的结合体,是操作系统分配资源的基本单位。
操作系统只把资源非配给进程,至于进程中的各个线程,他们是共享其中的所有的资源的。

进程是系统中正在运行的一个应用程序(浏览器、办公软件等),程序一旦运行起来就是进程。
<1>进程可以看成程序执行的一个实例。
   进程是系统资源分配的基本单位,每个进程都拥有独立的地址空间。
   一个进程无法访问另一个进程的变量和数据结构,
   进程之间原则上是互相独立的。
   如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。
   
<2>一个进程可以拥有多个线程(最少一个线程),所有线程共享其所属进程的栈空间。
   线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态,
   多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。 
   同一个进程内的线程是互相合作的。

4/线程

 <1>线程是进程的一个实体,是进程的一条执行路径。
    可以理解为:线程就是具体来干活的。
 
 <2>当一个线程修改了进程的资源,它的兄弟线程可以立即看到这种变化。
    同时,每个线程还拥有自己的寄存器和栈,其他线程可以读写这些栈内存。
    
 <3>一个进程可以拥有多个线程,每个线程共同使用其所属进程的栈空间。 
    线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态,
    多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。
    同时,每个线程还拥有自己的寄存器和栈,其它线程可以读写这些栈内存。
    
 <4>进程间相互独立,同一进程的各线程间共享。
    某进程内的线程在其他进程内不可见。
    
 <5>通信:进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
 
 <6>调度和切换:线程上下文切换比进程上下文切换快得多。
    因为进程之间切换涉及到资源/空间等一系列的切换,
    而线程是共享进程资源的,所以线程之间切换不涉及到资源的切换。