![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
比锅
这个作者很懒,什么都没留下…
展开
-
进程、线程
基于linux-0.11 为了充分利用硬件资源,特别是CPU,要实现进程间的并发执行,所以进程分为5种状态,每种状态由一个PCB队列管理,实现进程间的调度从而实现进程的并发执行 线程是进程的子单位,每个进程有一个或多个线程,线程分为: 用户级线程:用户可直接切换线程,不涉及内核,os不可感知 核心级线程:由内核调度切换线程,涉及内核,os可感知用户级线程切换 核心级线程切换: PCB(pro原创 2017-12-05 22:39:50 · 113 阅读 · 0 评论 -
进程同步与信号量
进程同步:多个进程共同完成一个任务 信号量:记录有几个生产者/消费者在等待,有空位/资源后才能全部唤醒 临界区代码(上锁):一次只允许一个进程进入改段代码(有空让进、有限等待)用临界区保护信号量,用信号量实现进程同步 进入临界区算法 两个进程同步:Peterson算法 多个进程同步:面包店算法:每个进程进入临界区前获得一个号码,号码非0最小先服务,西开时号码置为0 硬件关中断法 硬件原子指令法原创 2017-12-09 14:54:12 · 450 阅读 · 0 评论 -
内存管理
程序的重定位: 编译时(只能放固定位置)、载入时(载入后不能换位置)、所以在运行时重定位最好。所以每个进程执行时通过PC得到的逻辑地址–>虚拟地址(虚拟内存地址)–>物理地址(物理内存地址)。 程序的载入: 将内存分段(代码段,数据段…)方便用户使用–> 将内存分页(固定大小、可变大小)提高内存利用率–> 引入虚拟内存(段页结合)每个进程“看见”的可用内存变大–> 虚拟内存(比物理内存大)原创 2017-12-10 16:09:15 · 118 阅读 · 0 评论 -
os的启动
基于linux-0.11打开电源 –> BIOS:起始PC就是BIOS (ROM),执行BIOS,检查硬件,给出bootsect.s地址,读入磁盘0磁道0扇区的bootsect.s –> bootsect.s:执行bootsect.s,读入setup.s,将system代码读入内存(从0开始),给出setup.s地址 –> setup.s:执行setup.s(里面包含了system代码原创 2017-12-02 22:22:39 · 386 阅读 · 0 评论 -
系统调用
基于linux-0.11 操作系统接口:连接应用程序和操作系统的接口函数,供应用程序调用系统内核函数,所以也称系统调用。 不直接使用内核函数原因:保护内核代码 如何间接使用内核函数:CPL(Current Privilege Level)、DPL(Descriptor Privilege Level)、RPL(Rquest Privilege Level) 步骤:应用程序调用API API将系统调用原创 2017-12-02 23:00:11 · 281 阅读 · 0 评论 -
I/O系统
文件视图 显示器和键盘 每个设备就是一个“文件”,包含自己的“设备属性”,根据“设备属性”和调用方法进行I/O。原创 2017-12-11 21:27:50 · 300 阅读 · 0 评论 -
磁盘文件系统
磁盘文件系统原创 2017-12-14 21:03:12 · 182 阅读 · 0 评论 -
悲观锁及乐观锁
一、三种典型不一致: 假设数据A=1 1.脏读: -> T1读取A=1 -> T1修改写入A=2 -> T2读取A=2 -> T1rollback,即A=1 T2读取的数据是错误的 2.丢失修改 -> T1读取A=1 -> T2读取A=1 -> T1修改A=A+1=2 -> T2修改A=A+1=2 -> T1写A=2 ...原创 2018-04-15 21:55:55 · 205 阅读 · 0 评论