zoukankan      html  css  js  c++  java
  • 操作系统基础知识总结(一)

    1. 进程和线程的区别

    进程

    进程,即正在运行的程序,程序从硬盘载入到内存就变成进程。进程是资源的拥有者,每个进程都拥有着自己的内存空间与多个线程。

    线程

    线程是指令的执行者,是计算机执行指令的基本单元,一个进程可以拥有多个线程。线程的引入主要有如下原因:

    1. 响应:与进程相比,创建线程不涉及或较少涉及资源分配,因此速度较快
    2. 资源共享:线程间可以共享资源,同一个进程内两个线程通信快
    3. 经济:创建线程不涉及或较少涉及资源分配
    4. 适合计算机的多处理器架构

    线程既有共享的资源,也有自己私有的资源,JVM中线程持有的资源一般如下:

    • PC(程序计数器):线程私有
    • 栈:线程私有
    • 堆:线程共享
    • 方法区:线程共享

    在操作系统中,线程还会细分为用户空间的用户级线程与内核空间的内核级线程,两种线程之间还有多种关系模型,在此不再赘述。

    2. 死锁的必要条件,怎么处理死锁

    死锁有四大必要条件,缺一不可:

    • 互斥:至少有一个资源同时只能被一个进程所拥有的
    • 占有且等待:一个进程必须持有至少一个资源去等待其他的资源
    • 非抢占时:资源不能被抢占,一个资源只有当进程执行完毕才会被释放
    • 循环等待:多个进程循环等待其他进程释放资源

    对付死锁我们大致可以从三个方面入手:

    1. 死锁预防与避免:不允许程序死锁
    2. 死锁检测与恢复:允许程序死锁,死锁后进行恢复工作
    3. 忽略死锁:出现死锁直接不管(大多数操作系统的做法)

    3. 内存管理方式:段存储,页存储,段页存储

    段存储示意图如下:

    段式存储系统

    用户程序通过逻辑内存的段号查找段表,获取段的物理内存初始地址与长度,然后操作系统即可在物理内存上读取相应的数据。

    使用段存储会出现外部碎片。

    页存储示意图如下:

    页式存储系统

    操作系统先把内存空间切分成大小相等的块,用户程序根据自身的大小占用一定的帧。

    用户程序通过逻辑内存的页号去页表查找对应的物理内存的块号(帧号),然后操作系统在物理内存上读取相应的数据。

    使用页存储会出现内部碎片。

    有些操作系统还会有TLB(页表缓存),把一些常用的页面放在TLB中方便快速查询,要是TLB中查询失败再去页表查询。

    段页存储即先分段再分页的内存管理办法,其示意图如下:

    段页式存储管理

    4. 进程的几种状态

    进程有以下几种状态:

    • New(创建状态):表示进程正在被创建
    • Running(运行状态):表示进程正在执行
    • Waiting(等待状态):表示进程正在等待事件的发生
    • Ready(就绪状态):表示进程已经准备好,等待分配CPU处理器
    • Terminated(终止状态);表示进程已经执行完毕,被终止
  • 相关阅读:
    在Linux中查找jdk路径
    AABO:自适应Anchor设置优化,性能榨取的最后一步 | ECCV 2020 Spotlight
    CSG:清华大学提出通过分化类特定卷积核来训练可解释的卷积网络 | ECCV 2020 Oral
    PIoU Loss:倾斜目标检测专用损失函数,公开超难倾斜目标数据集Retail50K | ECCV 2020 Spotlight
    简单的特征值梯度剪枝,CPU和ARM上带来4-5倍的训练加速 | ECCV 2020
    Jigsaw pre-training:摆脱ImageNet,拼图式主干网络预训练方法 | ECCV 2020
    在Windows下用VScode构造shell脚本的IDE
    Jmeter JDBC Request 使用详解
    Jmeter逻辑控制器Switch Controller的用法
    Jmeter逻辑控制器之If Controller的使用解析
  • 原文地址:https://www.cnblogs.com/KingIceMou/p/6984110.html
Copyright © 2011-2022 走看看