进程和线程

cpu

  • 计算机的核心是cpu,承担了所有的计算任务
  • 单个cpu只能一次运行一个任务

进程

定义

  • 进程是具有一定功能的程序关于某个数据集合上的一次运行活动

为什么需要进程

为了提高CPU的效率,人们想把多个程序同时加载到计算机中,并发执行,这些同时存在于计算机内存的程序就称为进程,进程让每个用户自己独占CPU,因此进程是为了在CPU上实现多道编程而出现的概念

简单解释

  • 一个程序加载到内存后就变成了进程
  • 进程是系统进行资源调度和分配的一个独立的单位

什么是进程

  • 从物理内存上:进程是内存的一片内存空间,在任意时刻cpu只能执行一条指令,执行哪条指令由物理程序由程序计数器决定,也就是说,进程共用一个程序计数器
  • 从逻辑上:由于进程可以执行,也可以被挂起,还能继续执行,因此从这个角度看,每个进程有着自己的计数器
  • 从时间上:进程都是向前推进

进程的管理

进程在计算机上运行,需要让计算机分配合适的内存,让其有一个安身之处,由于多个进程可能同时并存,因此为了解决让多个进程共享同一个物理内存而不发生冲突,操作系统解决这个问题的手段是内存管理;此外进程也需要进行切换,因此计算机为解决这个问题,则有了进程调度

  • 进程表存放进程的一切信息

  • 当一个进程产生的时候,操作系统需要为它创建记录,存储的结构为进程表

进程的创建过程

  • 分配进程控制块
  • 初始化机器寄存器
  • 初始化页表
  • 将程序代码从磁盘读进内存
  • 将处理器状态设置为用户态
  • 跳转到程序的起始地址

特点

  • 代表cpu只能处理的单个任务
  • 任意时刻,cpu只能运行一个进程

进程的几种状态

  • 就绪状态

    当进程分配到除了cpu以外的所有必要的资源,只要获得处理机便可以立即执行

  • 运行状态

    进程获得了处理机,其程序正在处理机上执行

  • 阻塞状态

    正在执行的进程,由于等待某事件发生而无法执行时,便放弃处理机而处于阻塞状态

状态的转换

  • 执行到就绪

    一个进程运行时间太长,操作系统可以将其挂起

  • 执行到阻塞

    运行期间执行了某种阻塞操作

  • 阻塞到就绪

    一个阻塞的进程等待的资源到达后,就可以随时执行,进入就绪状态

  • 就绪到执行

    就绪进程由操作系统调度到cpu上就进入执行状态

  • 阻塞到执行

    操作系统在给阻塞分配到资源后,并不会立即执行,因此此转换不成立,操作系统选择执行的进程只会在就绪进程中选择

  • 就绪到阻塞

进程的通信方式

  • 管道

    • 在某种存储空间介质上划出一片空间,赋给其中一个进程写的权力,另一个进程读的权力

    • 类型

      • 普通管道

      • 流管道

      • 记名管道

        • 允许无亲缘关系的进程间的流动
    • 特点

      • 数据单项流动
      • 且只能在具有亲缘关系的进程间流动,进程的亲缘关系通常是父子进程
  • SOCKET

  • 信号

    • 为什么还需要用信号进行通信

      • 像迫使一方对为我们的通信立即做出回应
      • 不想建立任何连接,而是临时突然感觉需要进行通信
      • 传输的信息量微小,使用管道或者套接字不划算
    • 信号是什么

      • 一个内核对象或者说是一个内核数据结构
      • 发送方将数据结构的内容填好,并指明信号的目标进程,发出特定的软件中断
      • 操作系统收到特定的中断请求,知道有信号要发送,并进行通知
      • 进程收到通知,并对信号进行处理
  • 信号量

    • 类比火车的发行,管理铁路的是一个信号量,任何一列火车必须等待表明铁路可以行驶的信号后才能进入轨道
    • 在计算机中,信号量的本质为一个整数0或1
    • 信号量不仅仅是一种通信机制,更是一种同步机制
  • 共享内存

    信息交换量最大

    • 用于进程之间需要共享大量数据

    • 步骤

      • 进程首先需要创建一片内存空间专门作为通信用
      • 其他进程则将该片内存映射到自己的虚拟地址空间
    • 两端都可进行读写相比较于管道

    • 缺点

      • 管理复杂
      • 安全性低
  • 消息队列

    • 和管道的不同

      • 无需固定的读写
      • 可以支持多个进程
      • 多个进程可以读写消息队列

进程的缺陷

  • 进程只能在一个时间做一件事情
  • 进程在执行的过程中,如果发生阻塞,例如等待输入,整个进程就会被挂起,无法继续执行,因此在进程里面有部分工作,不需要使用用户输入数据,也无法推进,因此为了解决这个问题,出现了线程。

线程

解释

  • 线程是进程的实体,是cpu调度和分派的基本单位
  • 它是比进程更小的能独立运行的基本单位
  • 一个进程至少有一个线程
  • 多线程的情况先,增加cpu,可以提高进程的执行效率

特点

  • 一个进程包含多个线程
  • 一个进程的内存空间是共享的,每个线程都可以使用这些共享内存

线程管理

  • 线程控制表

  • 和进程共享的部分

    • 地址空间
    • 全局变量
    • 文件
    • 子进程
    • 定时器
    • 信号
    • 占用CPU时间也可以共享
  • 和进程不可共享的部分

    • 寄存器
    • 程序计数器

线程的调度

  • 由进程负责,进程中有一个执行序列

    • 用户态
  • 由操作系统负责

    • 内核态

线程中用户态到内核态的切换

  • 设置处理器内核态
  • 保存当前的寄存器(栈指针,程序计数器、通用寄存器)
  • 将栈指针设置指向内核栈地址
  • 将程序计数器设置为一个视线约定的地址上,该地址存放的是系统调用处理程序的起始地址

线程同步

  • 方式

    • 临界区

      • 当多个线程访问问一个独占性共享资源呢的时候,可以使用临界区对象。
      • 拥有临界区对象的线程可以访问被保护起来的资源,其他线程如果要访问,必须等待获取临界区对象
    • 事件

      • 一个线程结束后,主动唤醒另外一个线程执行任务

      • 事件的两种状态

        • 有信号
        • 无信号
      • 事件的两种类型

        • 人工事件

          • 获得信号后,释放可利用的线程,直到调用成员函数Reset()才将其设置为无信号状态,这一阶段为手动执行
        • 自动事件

          • 在被至少一个线程释放后自动返回到无信号的状态,这一阶段为自动执行
    • 互斥量

      • 只有拥有互斥对象的线程才能有访问公共资源的权限,互斥对象只有一个
      • 线程在使用每一个内存空间的时候,其他的线程如果想要使用,必须等到该线程结束,这里使用了互斥锁
    • 信号量

      • 即允许多个线程同时访问同一资源

      • easy explain

        • 有些内存只能提供给固定数目的线程使用
        • 每个线程在使用的时候,需要取钥匙,进去,出来时在挂回钥匙
  • 目的

    • 防止线程共同运行时,对结果产生不确定性
    • 不论线程的执行如何穿插,其运行结果都是正确的
  • 两个或多个线程相执行同一段代码或者访问统一资源的现象称为竞争,这个可能造成竞争的共享代码段或者资源称为临界区

总结

  • 多进程形式,允许多个任务同时运行

  • 多线程形式,允许单个任务分成不同的部分运行

  • 协调机制,防止进程和线程之间的冲突,另一方面允许进程之间和线程之间共享资源

  • 线程可以独享

全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
441069次浏览 4495人参与
# 春招别灰心,我们一人来一句鼓励 #
41545次浏览 524人参与
# 阿里云管培生offer #
119983次浏览 2219人参与
# 地方国企笔面经互助 #
7937次浏览 18人参与
# 同bg的你秋招战况如何? #
75837次浏览 554人参与
# 虾皮求职进展汇总 #
114640次浏览 885人参与
# 北方华创开奖 #
107341次浏览 599人参与
# 实习,投递多份简历没人回复怎么办 #
2454217次浏览 34849人参与
# 实习必须要去大厂吗? #
55703次浏览 960人参与
# 提前批简历挂麻了怎么办 #
149846次浏览 1977人参与
# 投递实习岗位前的准备 #
1195775次浏览 18547人参与
# 你投递的公司有几家约面了? #
33182次浏览 188人参与
# 双非本科求职如何逆袭 #
661978次浏览 7394人参与
# 如果公司给你放一天假,你会怎么度过? #
4734次浏览 55人参与
# 机械人春招想让哪家公司来捞你? #
157608次浏览 2267人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11417次浏览 276人参与
# 发工资后,你做的第一件事是什么 #
12467次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35657次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20096次浏览 240人参与
# 我的上岸简历长这样 #
451947次浏览 8088人参与
# 实习想申请秋招offer,能不能argue薪资 #
39252次浏览 314人参与
# 非技术岗是怎么找实习的 #
155859次浏览 2120人参与
牛客网
牛客企业服务