美文网首页
《操作系统概念精要》个人见解之进程线程篇

《操作系统概念精要》个人见解之进程线程篇

作者: 小pb | 来源:发表于2019-10-24 21:37 被阅读0次

    1. 如何理解进程?

    进程在直观的概念上,进程就是运行起来的程序。

      强调:程序的本身不是进程,程序只是被动实体,它是磁盘上包含的一系列的指令的文件。
           进程是活动的实体,具有一个程序计数器用于表示下个执行命令和一组可以描述当前进程状态的信息。
                                                      -------《操作系统概念精要》
    

    个人理解:程序好比一个机器人,只是一堆机械,进程好比一个安装了电池的机器人,他们有了自己运行的一些状态信息。

    2.操作系统是如何把CPU 抽象成进程的?

    回答这个问题,一定要搞懂两个概念,就是物理CPU和逻辑CPU。
    物理CPU好理解,它就是实际运行在物理机上的可以运行指令的东西。
    当一个程序在运行的时候,他在CPU上运行一般分为,取指,解码和运行三个部分。和这三个在运行的时候需要用到一些寄存器,和程序计数器一起其他在运行时需要的一些信息。
    当在它的运行时间周期我们可以进行一个快照,这个可以认为CPU处于运行状态。
    我们假设这个时候将这个世界静止下来,把这些寄存器和程序计数器一起其他的堆栈信息,一起它的运行状态进行记录,那么我们用包含这些信息的结构体就可以 抽象出来CPU的状态,从而对CPU进行了一个抽象。我们把保存这个CPU状态的结构成为程序控制块(PCB)。

    3. 如何理解内核态和用户态?如何理解 用户线程和内核线程?

    根据书上和字面上的意思,内核态可以执行CPU的指令集的全部,用户态是只可以执行CPU指令的集的部分子集,比如,内部和I/O以及PSW(程序计数器寄存器)是不可以修改。他要访问物理硬件必须通过系统调用,切换到内核态。
    了解了内核态和用户态,就以此类推。类比用户线程和内核线程。
    用户线程就是运行在用户态的,内核线程是运行在内核态的。

    重要:

    在讨论进程的时候没有用户进程和内核进程的讨论,其实它是隐式存在的,因为当用户进程执行系统调用的时候,他就要切换到内核态,进行指令的操作。如果细分的话,他在进程内是有一个用户线程和内核线程的,内核线程是专门为了执行系统调用而服务的。
    其实上面说的那个就是最基本的一对一的线程模型。
    所以在理解这个用户线程和内核线程的时候,只要记住,内核线程是用来为用户线程执行的系统调用来服务的就会对很多问题有所理解。
    类似的也就可以理解线程的 多对一,和多对多模型进行理解。

    4. 当父进程创建子进程后,父子进程会共享那些数据?

    父进程在创建子进程的时候,一般子进程是父进程的一个副本,当执行数据的时候
    他会有写时拷贝这么一说,这时,他的变量和堆栈,会被重新拷贝出来一份,但是有编程的同学都应该知道有深浅拷贝, 这里的拷贝就类似与浅拷贝,它指针指向的地方不会进行复制,所以对于它的PCB里面包含的文件描述符指向的I/O设备的是不会被复制一份的。理解了深浅拷贝和PCB 里面包含的数据就很会很好的理解这个问题。

    5.同一个进程内的线程之间共享哪些数据?

    每个线程都有自己的程序计数器,和寄存器以及堆栈信息。但是他们都是共享的进程的地址空间,堆内存,代码段,数据段和打开的文件以及信号。


    thread_1.png

    6. 如何理解进程是系统分配资源的基本单位,线程是CPU执行的最小单位?

    地址空间是在进程的层级提出的,它是在进程创建的时候进行分配的。线程的创建时在线程库的基础上实现的,并不存在资源的分配。
    CPU的执行,都是根据程序计数器和周边的寄存器共同决定那一条质量来执行的,每个线程有自己的程序计数器和寄存器,那说明只有一个线程就能完全确定CPU执行哪条指令。

    相关文章

      网友评论

          本文标题:《操作系统概念精要》个人见解之进程线程篇

          本文链接:https://www.haomeiwen.com/subject/wxxjvctx.html