zoukankan      html  css  js  c++  java
  • 操作系统——第二章 进程管理

    二、进程管理

    2.1进程与线程

    2.1.1进程的基本概念

    PID (ProcessID)

    2.1.1进程的概念

     

    多道并发执行可能会发生的问题:

    不能让程序粗野的执行,我们必须给他们引入一些约束:

    进程包括什么:

    进程控制块是一种数据结构,在Linux中是一个结构体

     

    (答案就是上面的那张图)

    挂起状态

    (Linux代码)

    2.1.6线程

    设计之初进程是独立的,进程间不允许用相同的地址空间,必须得开辟一块新的存储空间,然后来取,线程的设计解决了这种问题。

    比如还是播放器问题:

    单进程的话,读完了要把pcb中存储空间拿出来放到一个区域里,然后再解码,然后放出来,然后再去播放。

    有了线程,在同一个存储空间中,调度进行读完,解码,播放。

    线程是调度的单位 进程退化为资源的单位

    内核级线程:

     

    用户级线程:

    1.runtime

    2.lwp

    网上资料:

    用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。用户线程不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少为了在操作系统中加入线程支持,采用了在用户空间增加运行库来实现线程,用户线程是不能被操作系统所感知的。
    内核线程和用户线程都有自己的优势和缺点,一般配合使用

    2.3同步与互斥

    2.3.1 进程同步的概念

    互斥:你和我没沟通交流,你拿走了我就没法用,等你拿走了我才能用

    直接制约同步:你和我有沟通有交流,接力比赛,第二棒要等第一棒来了才能跑 棒子不能扔地上,你必须把棒子给我(而互斥就是互相抢资源)

    同步:消费者必须等生产者生产出来才能消费,不能凭空消费

    n个缓冲区:如果生产了n个放不进去就别放了

    (挂着牌子并且拿着钥匙就能进去)

    (类似于数据结构中的拓扑排序)

     拿左筷子 拿右筷子,吃饭

    4

  • 相关阅读:
    IT从业人员关注哪些问题
    Java实现 LeetCode 350 两个数组的交集 II(二)
    Java实现 LeetCode 349 两个数组的交集
    Java实现 LeetCode 349 两个数组的交集
    Java实现 LeetCode 349 两个数组的交集
    Java实现 LeetCode 347 前 K 个高频元素
    Java实现 LeetCode 347 前 K 个高频元素
    Java实现 LeetCode 347 前 K 个高频元素
    Java实现 LeetCode 345 反转字符串中的元音字母
    Java实现 LeetCode 345 反转字符串中的元音字母
  • 原文地址:https://www.cnblogs.com/eret9616/p/9452319.html
Copyright © 2011-2022 走看看