操作系统 面试

死锁的四个必要条件

  • 互斥条件:一个资源每次只能被一个进程使用。
  • 占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环

ZooKeeper的角色

它是一个分布式服务框架,用于维护配置信息,提供统一命名,分布式状态同步,集群管理等服务。

  • 领导者leader:负责进行投票的发起和决议,更新系统状态
  • 跟随者follower:接收客户端请求并向客户端返回结果,参与投票
  • 观察者observer:接收客户端请求,将写请求转发给leader,不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
  • 客户端client:请求发起方

Zookeeper的工作原理 Paxos帕克索斯

  • 为了保证事务的顺序一致性,zookeeper采用了**递增的事务id号(zxid)**来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。zxid是64位的数字,高32位标识leader关系是否改变,低32位递增计数。

  • 当leader奔溃或者leader失去超过一半的follower,这时候会进入恢复模式,恢复模式需要重新选举一个 新的leader,让所有server都恢复到一个正确的状态。

  • [帕克索斯]是最重要的分布式一致性算法

  • tips:为了选举成功,要求zookeeper集群部署必须是奇数节点。

  • 参与者

    • proposer 提出提案,提案信息包括提案编号和提议的value
    • acceptor 收到提案后可以接受(accept)提案;
    • learner 只能"学习"被批准的提案;
  • prepare阶段:

    • 当Proposer希望提出方案V1,首先发出prepare请求至大多数Acceptor。Prepare请求内容为序列号;

    • 当Acceptor接收到prepare请求时,检查自身上次回复过的prepare请求

      • 如果SN2>SN1,则忽略此请求,直接结束本次批准过程;
      • 否则检查上次批准的accept请求(SNx,Vx),并且回复(SNx,Vx);如果之前没有进行过批准,则简单回复OK;
  • accept批准阶段

    • 经过一段时间,收到一些Acceptor回复,回复可分为以下几种:

      • 回复数量满足多数派,并且所有的回复都是,则Porposer发出accept请求,请求内容为议案(SN1,V1);
      • 回复数量满足多数派,但有的回复为:(SN2,V2),(SN3,V3)……则Porposer找到所有回复中超过半数的那个,假设为(SNx,Vx),则发出accept请求,请求内容为议案(SNx,Vx);
      • 回复数量不满足多数派,Proposer尝试增加序列号为SN1+,转perpare1继续执行;
    • 经过一段时间,收到一些Acceptor回复,回复可分为以下几种:

      • 回复数量满足多数派,则确认V1被接受;

      • 回复数量不满足多数派,V1未被接受,Proposer增加序列号为SN1+,转1继续执行;

    • 在不违背自己向其他proposer的承诺的前提下,acceptor收到accept 请求后即接受并回复这个请求。

  • Basic Paxos选举的区别在于,通过选举产生一个leader (领导者),只有leader才能提交proposer

进程和线程的区别 和 使用场景

  • 进程,并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
  • 线程,进程的一个执行单元,是处理器调度和执行的基本单位,比进程更小的独立运行的基本单位。
  • 协程,比线程更加轻量级的存在
  • 根本区别:进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位
  • **地址空间:**线程贡献本进程的地址空间,进程之间是相互独立的
  • **资源:**线程共享进程的内存、IO资源,不利于资源管理和保护;进程之间资源独立
  • 健壮: 多进程比多线程健壮,一个进程崩溃后,在保护模式下不会对其他造成影响,线程崩溃整个进程死掉
  • 执行过程: 每个独立的进程有一个程序运行的入口、顺序执行序列,执行开销大;线程不能独立执行,依存在应用程序中,开销小。
  • **可并发性:**都可并发执行
  • 对资源的管理和保护要求高,不限制开销和效率时,使用多进程。
  • 要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程

进程间通信的方式有什么?线程间通信的方式有什么?

  • 管道 半双工(数据只能在一个方向上流动) 只适用于父子进程或者兄弟进程 存在内存中 速度慢
  • 有名管道FIFO 半双工,可以在无关的进程之间交换数据,存在文件系统中 速度慢
  • 消息队列 具有特点格式和优先级 可以向消息队列加消息 或者读取 放在内核中
  • 信号量 是一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间通信数据
  • 共享内存区:能够很容易控制容量,速度快,但要保持同步
  • 线程之间可以通过 管道、信号量通信

缓存和LRU算法

  • 缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存汇总查询数据,有则直接执行,不存在时从内存中获取。由于缓存的数据比内存快的多,所以缓存的作用就是帮助硬件更快的运行。缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到硬盘等存储器中永久存储。电脑中最大缓存就是内存条,硬盘上也有16M或者32M的缓存。

  • LRU参考:设计LRU缓存结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值