zoukankan      html  css  js  c++  java
  • 进程和线程

    CPU并不知道线程和进程之类的概念

    CPU只知道两件事:

    1、  从内存中取出指令;

    2、  执行指令,然后再从内存中取出下一条指令

    寄存器

    CPU从哪里取出指令呢?答案是寄存器,可以把寄存器简单地理解为内存,不过存取速度比内存更快。寄存器中存放的是CPU将要执行的下一条指令的地址。寄存器中的地址默认是自动加1,遇到if和else时,这种顺序执行就被打破了。CPU在执行这类指令时会根据计算结果来动态改变PC寄存器中的值,这样CPU就可以正确地跳转到需要执行的指令了。

    函数

    指令形成的过程:程序代码源文件à编译器编译à可执行文件à磁盘à内存àCPU指令。函数被编译成功之后才会形成CPU执行指令,只需要找到函数被编译后形成的第一条指令,指令就可以按顺序执行下去。第一条指令就是函数的入口,也就是我们程序源代码中常用的main()函数

    进程

    如果想让CPU执行某个函数,那么只需要把函数对应的第一条机器执行装入PC寄存器就可以了,这样即使没有操作系统也可以让CPU执行程序。但是过程非常复杂:

    1、  需要在内存中找到一块大小合适的区域装入程序

    2、  需要找到函数入口,设置好寄存器让CPU开始执行程序

    机器指令需要加载到内存中执行,因此需要记录下内存的起始地址和长度;同时要找到函数的入口地址并写道PC寄存器中。需要一个结构体类型的数据结构来记录这些信息。该结构体记录的是程序在被加载到内存中的运行状态,叫做进程

     

    线程

    所谓进程,无非就是内存中的一段区域,这段区域中保存了CPU执行机器指令以及函数运行时的堆栈信息,要想让进程运行,就把main函数的第一条机器指令地址写入PC寄存器,这样进程就运行起来了。进程的缺点在于只有一个入口函数,也就是main函数,因此进程中的机器指令只能被一个CPU执行。但是既然我们可以把main函数的第一条指令吸入PC寄存器,那么其他函数和main函数本质上来说也没有什么区别。可以把PC寄存器执行main函数,也可以把PC寄存器指向任何一个函数。当把PC寄存器指向非main函数时,线程就诞生了。这样一个进程内可以有多个入口函数,也就是说属于同一个进程中的机器指令可以被多个CPU同时执行。

     

  • 相关阅读:
    973. K Closest Points to Origin
    919. Complete Binary Tree Inserter
    993. Cousins in Binary Tree
    20. Valid Parentheses
    141. Linked List Cycle
    912. Sort an Array
    各种排序方法总结
    509. Fibonacci Number
    374. Guess Number Higher or Lower
    238. Product of Array Except Self java solutions
  • 原文地址:https://www.cnblogs.com/phantom0308/p/14365661.html
Copyright © 2011-2022 走看看