zoukankan      html  css  js  c++  java
  • 02-操作系统必会问题

    1、程序、进程与线程是什么?区别与联系?

    1. 程序:只是一堆代码。
    2. 进程:对运行时程序的封装。OS--资源调度与分配的基本单位。实现了OS的并发
    3. 线程:是进程的实体。CPU--调度与分派的基本单位。实现了进程内部的并发

    联系

    1. 一个进程由一个或多个线程组成
    2. 一个进程内的所有线程,共享该进程的所有系统资源
    3. 进程与线程都可以并发

    区别

    1. 地址空间。
      进程--独立的地址空间。
      线程--共享本进程的地址空间
    2. 拥有资源。
      进程--拥有系统资源的--一个独立单位。
      线程--拥有一点运行中必不可少的资源----(一组寄存器,栈,程序计数器)。
      共享---本进程的--相关资源--(内存,I/O,CPU)
    3. 独立性。
      一个进程崩溃--保护模式下--对其他进程--不会产生影响
      一个线程崩溃--整个进程--都死掉
      多进程比多线程健壮
    4. 系统开销。
      进程切换--保存cpu环境的设置
      线程切换--保存少量寄存器的内容
      进程切换开销大于线程
      进程创建开销大于线程
    5. 执行过程。
      线程--不能独立执行--必须依存在--应用程序中
      每个独立线程--有一个程序入口--顺序执行序列--程序出口

    2、进程的5种状态

    1. 新建态。刚刚创建的--os没有把它加入到--可执行进程组
    2. 就绪态。进程is ready--有机会就执行
    3. 运行态。该进程正在执行
    4. 阻塞态。进程--等待阻塞进程的事件完成
    5. 退出态。os--从可执行进程组中---释放出的进程。或者自身或某些原因--停止运行

    3、进程/线程同步方式

    1. 临界区。相当于保护区域
    2. 互斥量。加锁控制
    3. 信号量。PV操作--改变信号量的值 S+1+1+1-1-1-1
    4. 事件Event。相当于通知操作
      https://www.cnblogs.com/zhangbaochong/p/5800650.html

    4、生产者消费者模型

    目的:解决生产者消费者间的强耦合问题---阻塞队列Queue

    1. 生产者消费者彼此之间不直接通讯--通过阻塞队列通讯
    2. 生产者生产完data后,不用等待消费者处理,直接扔给阻塞队列
    3. 消费者不找生产者要数据,直接从阻塞队列里去
    4. 阻塞队列相当于一个缓冲区,平衡了生产者消费者的能力

    5、进程通信方式

    IPC (InterProcess Communication) 进程间通信

    1. 管道
    2. 消息队列rabbitMQ
    3. 信号量
    4. 共享内存
    5. 信号
    6. 套接字socket
    7. 远程调用RPC。https://blog.csdn.net/kkkloveyou/article/details/51874354

    6、进程调度方式

    1. 先来先服务
    2. 最短作业优先。平均等待时间最短的进程
    3. 优先级调度算法。优先级高的
    4. 时间片轮转。每个进程轮流执行
    5. 多级队列调度。就绪队列分成多个独立的队列
    6. 多级反馈队列调度。允许进程在队列间移动

    7、页面置换算法

    1. 先进先出。比如作业调度
    2. 最近最少使用算法。 使用时间到现在的时间长短判断
    3. 最少使用次数。
    4. 最优置换算法。理论上的最优

    8、用户态与内核态?如何切换?

    用户态:一个进程(任务)在执行用户自己的代码时---称其处于用户运行太态
    内核态:一个进程(任务)执行系统调用--陷入内核代码中执行--内核运行态

    用户态-->内核态:

    1. 系统调用
    2. 异常
    3. 外围设备中断
      https://www.jianshu.com/p/6bd7392568a6

    内核态-->用户态:
    状态寄存器中---设置程序状态字PSW---记录处理器的运行状态---设置1位标识--R0,R1,R2,R3
    https://blog.csdn.net/qq_33414271/article/details/79634430

    9、内存的4种分配方式

    1. 栈。系统自动分配,管理
    2. 堆。程序猿自己申请,分配,释放
    3. 常量区。存放常量字符串,程序结束-释放
    4. 静态变量区。存放全局变量,静态变量。

    10、什么是死锁,如何解决

    多个进程在运行过程中----抢夺资源而造成的一种僵局
    如果没有外力推进-----处于僵局中的进程无法继续进行

    导致死锁的4个必要条件:

    1. 互斥。一次------只有一个进程----可以使用一个资源
    2. 不可抢占。不能抢占---进程已经占有的资源
    3. 循环等待。存在封闭的进程链---每个进程----此链中---下一个进程需要的资源
    4. 占有且等待。一个进程等待其他进程---继续占有----已经分配到的资源

    死锁处理:预防、避免、检测、解除死锁

    11、linux下的I/O模型 5种

    1. 阻塞I/O(blocking I/O)
    2. 非阻塞I/O(nonblocking I/O)
    3. 多路复用I/O(I/O multiplexing)
    4. 信号驱动I/O (signal driven I/O )
    5. 异步I/O(asynchronous I/O)

    前四种都是同步,只有最后一种才是异步IO。

    12、IO发生时涉及的对象和步骤

    1. 两个系统对象:
      1. 调用这个I/O的进程或线程
      2. 系统内核
    2. 步骤
      1. 等待数据准备 (Waiting for the data to be ready)
      2. 将数据从内核拷贝到进程中(Copying the data from the kernel to the process)

    这些IO模型的区别就是在两个阶段上各有不同的情况。

    13、select、poll、epoll

    I/O多路复用(select/epoll),也称这种方式为:事件驱动
    通过一种机制,监视多个描述符。一旦某个描述符就绪,通知应用程序进行相应的读写操作

    1. select
      每次调用select,需要把文件描述符集合,从用户态copy到内核态,开销巨大
      需要在内核,消耗大量时间,去轮询每个句柄,返回包含整个fd的数组
      支持的文件描述符数量存在最大限制,默认1024

    2. poll
      链表保存文件描述符,没有了文件数量限制,其他缺点依旧存在

    3. epoll
      linux下的多路复用I/O接口
      第一次调用epoll,需要把文件描述符集合,从用户态copy到内核态,只copy一次。
      不是轮询,设备时,通过回调函数,把就绪的文件描述符,放在就绪链表中
      epoll_wait()查看就绪列表中有没有就绪的文件描述符。
      只是查看活跃的连接

  • 相关阅读:
    iOS AFNetworking 2.6.0框架导入报错解决方法
    GitHub 上都有哪些值得关注学习的 iOS 开源项目?
    iOS开发ARC机制下的内存管理技术要点
    UIColor延伸:判断两个颜色是否相等
    iOS中的单例模式
    明天再整理,睡觉!
    pushViewController:animated:的问题
    解决UINavigationController在pushViewController时出现的"卡顿"问题
    在某OC字符串中,搜索指定的某字符串:-rangeOfString:
    SSH整合redis和MongoDB错误笔记
  • 原文地址:https://www.cnblogs.com/venicid/p/9710653.html
Copyright © 2011-2022 走看看