摘要: 内存管理 使用物理内存,不安全。 交换: 运行时把进程载入内存,不运行时放回磁盘。利用基址寄存器和界限寄存器计算动态地址。没法动态分配堆内存。 覆盖: 把程序分为很多段,先装入段0,运行完段0再装入段1,有空间就放在段0上边,否则就覆盖段0。 虚拟内存:让程序只有一部分被调入内存的情况下运行。 动态 阅读全文
posted @ 2024-02-29 13:46 hellozhangjz 阅读(26) 评论(0) 推荐(0)
摘要: 死锁的必要条件 资源互斥。 占有且等待:进程占有的资源在任务完成前不会主动释放。 不可抢占:进程不会强制抢占其他进程的资源。 循环等待。 死锁避免 在分配资源前看是否满足全部条件,不满足则不分配。(银行家算法。) 检测死锁 画出资源分配图,检测是否存在环路。检测环路前要将资源分配图化简,化简的原理是 阅读全文
posted @ 2024-02-29 13:13 hellozhangjz 阅读(23) 评论(0) 推荐(0)
摘要: 1、生产者消费者问题 信号量版本: # 定义缓冲区大小 bufferSize = 10 # 定义互斥锁和信号量 mutex = Semaphore(1) full = Semaphore(0) empty = Semaphore(bufferSize) # 定义生产者函数 def producer( 阅读全文
posted @ 2024-02-29 13:03 hellozhangjz 阅读(182) 评论(0) 推荐(0)
摘要: 1、 先来先服务 简单,但对短作业不公平。 2、 短作业优先 有抢占和非抢占版本。对长作业不公平,会导致饥饿问题。 3、 高响应比优先 响应比:等待时间/预计运行时间 没有饥饿问题。 4、 时间片轮转 没有饥饿问题。 若时间片小,进程切换频繁,吞吐量低;若时间片长,则响应时间过长,实时性得不到保证 阅读全文
posted @ 2024-02-29 11:06 hellozhangjz 阅读(23) 评论(0) 推荐(0)
摘要: 进程拥有资源,包括:内存空间中的代码、数据等;I/O 资源;打开文件;CPU等。 线程执行任务,线程只拥有CPU和少量寄存器,线程之间共享进程的资源。 为什么需要线程 进程切换开销大,主要包括: CPU的上下文切换:保存和恢复相关寄存器的内容 进程相关的数据结构切换:页表、文件描述符、消息队列等. 阅读全文
posted @ 2024-02-29 10:51 hellozhangjz 阅读(15) 评论(0) 推荐(0)
摘要: 为什么区分内核态和用户态 用户会进行不安全的访问和修改。 操作系统没法进程调度,因为拿不到cpu的执行权。 所以要区分权限,普通进程需要执行特殊操作的时候,需要让内核代为操作(陷入内核)。 什么时候陷入内核 系统调用(trap)、中断(interrupt)和异常(exception)。 系统调用是用 阅读全文
posted @ 2024-02-29 10:18 hellozhangjz 阅读(44) 评论(0) 推荐(0)