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(终止状态);表示进程已经执行完毕,被终止
  • 相关阅读:
    学习Mybatis与mysql数据库的示例笔记
    SpringAOP学习笔记
    idea开发ssh(Spring+struts+Hibernate)实现对MySQL数据库的增删改查
    springmvc加vue实现前后端数据的跨域访问
    idea开发工具springmvc加vue.js实现MySQL数据库的查询操作
    利用idea开发工具实现ssh(spring+struts+hibernate)加vue.js前后台对数据库的查询
    appweb 7.0.2版本编译
    Unable to register the DLL/OCX: RegSvr32 failed with exit code 0x3 我的解决方法
    无法定位程序输入点 InitializeCriticalSectionEx 于动态链接库 Kernel32.dll 上 问题解决方法
    海思3516D + IMX291图像闪烁问题定位
  • 原文地址:https://www.cnblogs.com/KingIceMou/p/6984110.html
Copyright © 2011-2022 走看看