操作系统学习--进程和线程

进程和程序的区别
进程是执行中的程序,除了程序之外还包括数据以及进程控制块

进程控制块

  • 进程标识信息
  • 进程控制信息:包括了进程状态信息,与其他进程的通信信息,进程所占的存储信息,调用系统资源的信息等,控制块所在链表的信息。
  • 现场保存的信息:内存地址,CPU状态,寄存器等信息
    进程控制块通过链表或索引表来组织
    进程的状态:
  • 创建
  • 执行
  • 等待
  • 抢占
  • 唤醒
  • 结束
    三状态进程模型:指就绪,执行和等待,程序运行时会在这三种状态间切换。就绪和等待的区别是,就绪指已经有了除CPU之外的资源,只需CPU叫它就能开始。等待是指还在等其他的资源,比如说被抢占的内存等。
    挂起进程模型:在三状态进程模型的基础上又加了就绪挂起和等待挂起两个状态,表示在相应的状态下当内存中地方不够时,把进程放到外存中。
    状态之间的切换其实就是在不同的状态队列里的搬迁。
    线程:当我们一个进程内部需要并发时,我们引入线程的概念。线程是CPU调度的最小单元(之前是进程)。引入线程更好的实现了资源的共享和并发。
    线程=进程-共享资源
    线程有几种实现:
  • 用户线程:系统本身不支持线程,还是以进程为单位调度,需要用户自己在用户态写线程的程序。优点是不依赖操作系统,缺点是不支持基于线程的处理机抢占。
  • 内核线程:基于系统内核的线程,优点是支持基于线程的处理机抢占,缺点是稍比用户态慢,是现在主流的线程实现方法。
  • 轻量级线程:同时支持前两者,但过于复杂,不实用。

进程的创建
Windows是通过一个CreatProcees函数创建的
LINUX是通过fork和exec两个函数来完成,具体做法是

  1. fork完成对父进程的复制,并分配新的进程ID
  2. exec将新的程序加载进来,完成对复制内容的替换,这样一个完全新的进程就创建完成啦

进程的加载
通过exec()函数来执行,包含在创建过程里。

进程的等待和结束
父进程对应wait(),子进程对应exit(),完成进程资源的回收;
父进程发现还有子进程时,进入wait状态,等待回收。当子进程结束时,发出exit(),父进程将其回收。
如果子进程exit了,但父进程没有响应,有两种情况:
一 是父进程还活着,只是有点忙,那子进程就进入僵尸状态,等待父进程回收;
二 是父进程不存在了,那子进程直接释放所有资源,进程结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值