Android技术知识Android开发经验谈Android开发

看这里,Android操作系统面试题,一文全解(吊打面试官系列)

2021-03-23  本文已影响0人  Android柯南

这一篇文章,楼主主要分享一下面试过程中遇到的关于操作系统的知识总结
因为水平有限,欢迎各位小伙伴在评论区里留言指正
另外,喜欢我文章的小伙伴,点赞,收藏,关注走一波呀,比心 ~

操作系统的四大特性

操作系统基本功能

CPU

需要面试资料和Android进阶路线图的同学可以上Github自取

CPU调度

Q:某一进程CPU使用率 50% 是什么意思?

Q:如何让CPU使用率固定在50%【仅限于单核CPU】

`public` `static` `void` `main(String args[])` `throws` `InterruptedException{`

`int` `busyTime =` `10``;`

`int` `idleTime = busyTime;`

`//设定空循环的运行时间`

`while``(``true``){`

`long` `startTime = System.currentTimeMillis();`

`//busy loop:`

`while``((System.currentTimeMillis()-startTime)<=busyTime)`

`;`

`Thread.sleep(idleTime);`

`}`

`}`

内存

内存的内部是由各种 IC 电路组成的,它的种类很庞大,但是其主要分为三种存储器:

内存管理机制

分页和分段共同点和区别

基本分页储存管理方式

基本分段储存管理方式

段页式内存管理

Q:页式存储,段式存储,段页式存储,引入快表,访问内存次数

物理内存 & 虚拟内存

进程的内存分配 & 内存访问

虚拟内存置换算法

用户态&内核态

系统调度

Q:Debug时看到的是物理内存还是虚拟内存 ?

操作系统是如何实现锁的?

操作系统使用锁的原语操作

操作系统中的锁机制

中断

  1. 当一个时间片运行完后,CPU会接收到计时部件(操作系统内核的时钟管理部件)发出的中断信号,CPU立即进入核心态,把CPU的使用权限交还给操作系统
  2. 当中断发生后,当前运行的进程暂停运行,操作系统内核对中断进程处理,切换进程(根据进程调度算法),在完成切换进程的一系列工作后,操作系统又会将CPU的使用权交还给用户进程
  3. 切换到的进程2拿到CPU执行权就会在用户态下执行

中断的处理过程

  1. 执行完每个指令后,CPU都要检查当前是否有外部中断信号
  2. 如果检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW、程序计数器、各种通用寄存器
  3. 根据中断信号类型转入相应的中断处理程序
  4. 恢复进程的CPU环境并退出中断,返回原进程继续往下执行

中断的分类

缺页中断

线程

Q:操作系统临界资源的访问

  1. 互斥量(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制,本质是一个计数器
  2. 信号量PV(Semphares):它允许同一时刻多个线程来访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量【用来实现生产者消费者模型】
    • 信号量的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程,信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
    • 注意,信号量的值仅能由PV操作来改变
    • p操作(wait):申请一个单位资源,进程进入;v操作(signal):释放一个单位资源,进程出来
    • PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作
  3. 事件event:通过通知操作的方式来保持多线程同步,还可以方便实现多线程优先级的比较操作,Wait/Notify

线程通信

进程

需要面试资料和Android进阶路线图的同学可以上Github自取

进程状态

进程同步

  1. 临界区:对临界资源进行访问的那段代码称为临界区。
  2. 同步与互斥:
    • 同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。
    • 互斥:多个进程在同一时刻只有一个进程能进入临界区。
  3. 信号量:信号量(Semaphore)是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。
    • down : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0;
    • up :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作
    • down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断
    • 如果信号量的取值只能为 0 或者 1,那么就成为了 互斥量(Mutex) ,0 表示临界区已经加锁,1 表示临界区解锁。
  4. 管程:管程在功能上和信号量及PV操作类似,属于一种进程同步互斥工具,但是具有与信号量及PV操作不同的属性。管程把控制的代码独立出来,封装了同步操作,对进程隐蔽了同步细节,简化了同步功能的调用界面。用户编写并发程序如同编写顺序(串行)程序。
    • 管程有一个重要特性:在一个时刻只能有一个进程使用管程。进程在无法继续执行的时候不能一直占用管程,否则其它进程永远不能使用管程。
    • 管程引入了条件变量以及相关的操作:wait() 和 signal() 来实现同步操作。对条件变量执行 wait() 操作会导致调用进程阻塞,把管程让出来给另一个进程持有。signal() 操作用于唤醒被阻塞的进程。

进程同步和进程通信的区别

Q:常见的进程间的通信方式(IPC,Inter-Process Communication)?

进程的调度

一. 批处理系统

二. 交互式系统

三. 实时系统

Q:有5个任务,每个任务权重15524,执行时间15534,如何用最短的时间执行完?

进程和线程的区别

多进程 & 多线程

协程

Q:协程是如何更少占用资源的

孤儿进程 & 僵尸进程【怎么产生的?有什么危害?怎么去预防?】

同步 & 异步

操作系统中的堆栈

死锁

产生死锁的原因

产生死锁的必要条件

处理策略

  1. 解决死锁:【撤销进程法
  2. 死锁预防:破坏死锁产生的四个必要条件中的一个或多个,以避免发生死锁。【资源有序分配法
    • 破坏互斥:不让资源被一个进程独占,可通过假脱机技术允许多个进程同时访问资源;
    • 破坏拥有和请求:1. 已拥有资源的进程不能再去请求其他资源,要求进程在开始执行前请求需要的所有资源;2. 要求进程请求资源时,先暂时释放其当前拥有的所有资源,再尝试一次获取所需的全部资源
    • 破坏不可抢占:有些资源可以通过虚拟化方式实现可抢占
    • 破坏循环等待:1. 保证每个进程在任何时刻只能占用一个资源,如果要请求另一个资源,必须先释放第一个资源;是将所有资源进行统一编号,进程可以在任何时刻请求资源,但要求进程必须按照顺序请求资源
  3. 避免死锁:判断是否会出现死锁就是看是否能找到一个安全序列,使得进程按推进顺序为每个进程分配其所需资源,使每个进程都能顺序执行。例如:【银行家算法
  4. 检测死锁并恢复:资源分配图;从一个或多个进程中抢占资源分配给死锁进程;终止所有的死锁进程。【资源分配图化简法

如何发现死锁?

  1. 使用jsp查找程序进行:jps是jdk提供的一个工具,可以查看到正在运行的java进程
  2. 使用jstack查看线程堆栈信息:jstack:jdk提供的一个工具,可以查看java进程中线程堆栈信息,后面可以查看到具体在代码哪一行。
  3. 也通过jdk提供的工具jconsole排查死锁问题:jconsole是jdk提供的一个可视化的工具,方便排查程序的一些问题,如:程序内存溢出、死锁问题等等。

需要面试资料和Android进阶路线图的同学可以上Github自取

上一篇 下一篇

猜你喜欢

热点阅读