2020年11月10日
摘要: 一、关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题。 1. 为什么redis能以单工作线程处理高达几万的并发请求? 2. 什么是I/O多路复用?为什么redis、nginx、nodeJS以 阅读全文
posted @ 2020-11-10 23:47 小熊餐馆 阅读(723) 评论(0) 推荐(0) 编辑
  2019年3月14日
摘要: 1.从零开始实现stream流 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式、更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算。 1.2 从零开始实现一个stream流 相信很多人在使用过java8的streamAPI接口之后,都会对 阅读全文
posted @ 2019-03-14 22:12 小熊餐馆 阅读(33512) 评论(15) 推荐(19) 编辑
  2021年9月14日
摘要: 1. MyAQS介绍 在这个系列博客中,我们会参考着jdk的AbstractQueuedLongSynchronizer,从零开始自己动手实现一个AQS(MyAQS)。通过模仿,自己造轮子来学习主要有两个好处,一是可以从简单到复杂,从核心逻辑再到旁路逻辑的实现,学习曲线较为平滑;二是可以站在设计者的 阅读全文
posted @ 2021-09-14 01:26 小熊餐馆 阅读(330) 评论(0) 推荐(0) 编辑
  2021年8月13日
摘要: 1.什么是自旋锁? 自旋锁作为锁的一种,和互斥锁一样也是为了在并发环境下保护共享资源的一种锁机制。在任意时刻,只有一个执行单元能够获得锁。 互斥锁通常利用操作系统提供的线程阻塞/唤醒机制实现,在争用锁失败时令线程陷入阻塞态而让出cpu,并在获取到锁时再将其唤醒。而自旋锁则是通过加锁程序中的无限循环, 阅读全文
posted @ 2021-08-13 20:29 小熊餐馆 阅读(1012) 评论(0) 推荐(0) 编辑
  2021年4月21日
摘要: 1. 阻塞队列介绍 顾名思义,阻塞队列是一个具备先进先出特性的队列结构,从队列末尾插入数据,从队列头部取出数据。而阻塞队列与普通队列的最大不同在于阻塞队列提供了阻塞式的同步插入、取出数据的功能(阻塞入队put/阻塞出队take)。 使用put插入数据时,如果队列空间已满并不直接返回,而是令当前操作的 阅读全文
posted @ 2021-04-21 19:55 小熊餐馆 阅读(897) 评论(3) 推荐(0) 编辑
  2020年12月24日
摘要: 1. ucore lab7介绍 ucore在前面的实验中实现了进程/线程机制,并在lab6中实现了抢占式的线程调度机制。基于中断的抢占式线程调度机制使得线程在执行的过程中随时可能被操作系统打断,被阻塞挂起而令其它的线程获得CPU。多个线程并发的执行,大大提升了非cpu密集型应用程序的cpu吞吐量,使 阅读全文
posted @ 2020-12-24 23:58 小熊餐馆 阅读(683) 评论(0) 推荐(0) 编辑
  2020年12月9日
摘要: 1. ucore lab6介绍 ucore在lab5中实现了较为完整的进程/线程机制,能够创建和管理位于内核态或用户态的多个线程,让不同的线程通过上下文切换并发的执行,最大化利用CPU硬件资源。ucore在lab5中使用FIFO的形式进行线程调度,不同的线程按照先来先服务的策略,直到之前创建的线程完 阅读全文
posted @ 2020-12-09 22:04 小熊餐馆 阅读(659) 评论(0) 推荐(0) 编辑
  2020年11月27日
摘要: 1. ucore lab5介绍 ucore在lab4中实现了进程/线程机制,能够创建并进行内核线程的调度。通过上下文的切换令线程分时的获得CPU,使得不同线程能够并发的运行。 在lab5中需要更进一步,实现我们平常开发接触到的、运行在用户态的进程/线程机制。用户线程通常用于承载和运行应用程序,为了保 阅读全文
posted @ 2020-11-27 11:17 小熊餐馆 阅读(1388) 评论(0) 推荐(2) 编辑
  2020年11月26日
摘要: 1. 跳表介绍 在之前关于数据结构的博客中已经介绍过两种最基础的数据结构:基于连续内存空间的向量(线性表)和基于链式节点结构的链表。 有序的向量可以通过二分查找以logn对数复杂度完成随机查找,但由于插入/删除元素时可能导致内部数组内整体数据的平移复制,导致随机插入/删除的效率较低。而普通的一维链表 阅读全文
posted @ 2020-11-26 22:03 小熊餐馆 阅读(499) 评论(0) 推荐(2) 编辑
  2020年11月10日
摘要: 一、关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题。 1. 为什么redis能以单工作线程处理高达几万的并发请求? 2. 什么是I/O多路复用?为什么redis、nginx、nodeJS以 阅读全文
posted @ 2020-11-10 23:47 小熊餐馆 阅读(723) 评论(0) 推荐(0) 编辑
  2020年11月1日
摘要: 1. ucore lab4介绍 什么是进程? 现代操作系统为了满足人们对于多道编程的需求,希望在计算机系统上能并发的同时运行多个程序,且彼此间互相不干扰。当一个程序受制于等待I/O完成等事件时,可以让出CPU给其它程序使用,令宝贵的CPU资源得到更充分的利用。 操作系统作为大总管需要协调管理各个程序 阅读全文
posted @ 2020-11-01 15:15 小熊餐馆 阅读(1441) 评论(0) 推荐(2) 编辑
  2020年10月22日
摘要: 1. ucore lab3介绍 虚拟内存介绍 在目前的硬件体系结构中,程序要想在计算机中运行,必须先加载至物理主存中。在支持多道程序运行的系统上,我们想要让包括操作系统内核在内的各种程序能并发的执行,而物理主存的总量通常是极为有限的,这限制了并发程序的发展。受制于成本问题,拥有足够大容量主存的个人计 阅读全文
posted @ 2020-10-22 22:19 小熊餐馆 阅读(1409) 评论(1) 推荐(1) 编辑
  2020年10月15日
摘要: 一、lab2物理内存管理介绍 操作系统的一个主要职责是管理硬件资源,并向应用程序提供具有良好抽象的接口来使用这些资源。 而内存作为重要的计算机硬件资源,也必然需要被操作系统统一的管理。最初没有操作系统的情况下,不同的程序通常直接编写物理地址相关的指令。在多道并发程序的运行环境下,这会造成不同程序间由 阅读全文
posted @ 2020-10-15 22:47 小熊餐馆 阅读(2965) 评论(2) 推荐(2) 编辑
  2020年9月28日
摘要: 一、ucore操作系统介绍 操作系统作为一个基础系统软件,对下控制硬件(cpu、内存、磁盘网卡等外设),屏蔽了底层复杂多样的硬件差异;对上则提供封装良好的应用程序接口,简化应用程序开发者的使用难度。站在应用程序开发人员的角度来看,日常开发中常见的各种关于并发、I/O、程序通信的问题等都和操作系统相关 阅读全文
posted @ 2020-09-28 22:37 小熊餐馆 阅读(3388) 评论(1) 推荐(3) 编辑
  2020年6月30日
摘要: 一、CPU高速缓存简单介绍 CPU高速缓存机制的引入,主要是为了解决CPU越来越快的运行速度与相对较慢的主存访问速度的矛盾。CPU中的寄存器数量有限,在执行内存寻址指令时,经常需要从内存中读取指令所需的数据或是将寄存器中的数据写回内存。而CPU对内存的存取相对CPU自身的速度而言过于缓慢,在内存存取 阅读全文
posted @ 2020-06-30 23:37 小熊餐馆 阅读(3793) 评论(6) 推荐(3) 编辑
  2020年6月18日
摘要: 一. 页式内存管理介绍 80386能够将内存分为不同属性的段,并通过段描述符、段表以及段选择子等机制,通过段基址和段内偏移量计算出线性地址进行访问,这一内存管理方式被称为段式内存管理。 这里要介绍的是另一种内存管理的方式:80386在开启了分页机制后,便能够将物理内存划分为一个个大小相同且连续的物理 阅读全文
posted @ 2020-06-18 23:54 小熊餐馆 阅读(1664) 评论(0) 推荐(0) 编辑
  2020年6月8日
摘要: 一.80386中断介绍 中断最早是为了协调并同步高速的CPU与相对低速的外部设备而提出的概念。所谓中断,是指当前程序/任务的执行过程中由于某种随时可能发生的外部请求,使得CPU中断正在执行的程序/任务,并跳转执行另一个例程(中断处理程序)或者中断服务任务中去(发生任务切换)。在服务处理完成后返回到之 阅读全文
posted @ 2020-06-08 00:10 小熊餐馆 阅读(876) 评论(0) 推荐(0) 编辑
  2020年5月31日
摘要: 一、80386任务切换介绍 前面提到过,80386是一款对多任务操作系统提供良好支持的CPU。多道程序功能使得在某一耗时任务执行时(例如大数据的I/O),允许其它短耗时任务并发的执行(例如接受输入的控制台命令) ,极大的提高了用户的体验。 80386作为早期的32位CPU,是单核处理器。因此8038 阅读全文
posted @ 2020-05-31 22:41 小熊餐馆 阅读(714) 评论(0) 推荐(0) 编辑
  2020年5月17日
摘要: 一、80386特权级保护介绍 80386CPU为了给操作系统提供硬件级的可靠保护,提供了特权级保护功能。80386处于保护模式时,会改变CPU的行为方式,其中便包括开启特权级保护。实现良好的特权级保护是需要软硬件相协调的,CPU提供硬件机制的同时也需要与操作系统相配合,共同实现完善的特权级保护功能。 阅读全文
posted @ 2020-05-17 22:23 小熊餐馆 阅读(1131) 评论(1) 推荐(1) 编辑
  2020年5月11日
摘要: 一.80386CPU介绍 Inter80386CPU是Inter公司于1985年推出的第一款32位80x86系列的微处理器。80386的数据总线是32位的,其地址总线也是32位,因而最大可寻址4GB的存储空间。 80386作为x86系列CPU的一员,保持着对更早生产的x86CPU的向前兼容。8038 阅读全文
posted @ 2020-05-11 00:12 小熊餐馆 阅读(1736) 评论(0) 推荐(0) 编辑
  2020年4月6日
摘要: 8086中断介绍 任何一种CPU,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到来自CPU内部或外部产生的特殊通知信息,并立即对所接收到的信息做出相应的处理。这类特殊的信息,被称作中断信息。 顾名思义,中断指的是CPU不去正常执行接下来的指令,而是被中断,转而处理中断信息。 中断信息的种 阅读全文
posted @ 2020-04-06 21:56 小熊餐馆 阅读(2160) 评论(4) 推荐(0) 编辑
  2020年3月31日
摘要: 8086标志寄存器介绍 前面已经介绍了8086大多数的寄存器,现在介绍一种8086内部一个特殊的寄存器,标志寄存器(flag register)。 8086标志寄存器大致有以下作用: 1.存储一些相关指令的执行结果 2.为CPU执行相关指令提供依据 3.控制CPU的部分工作方式 8086的寄存器是1 阅读全文
posted @ 2020-03-31 22:03 小熊餐馆 阅读(1585) 评论(1) 推荐(1) 编辑