操作系统
文章平均质量分 88
你回到了你的家
这个作者很懒,什么都没留下…
展开
-
原码反码补码
根据冯~诺依曼提出的经典计算机体系结构框架。一台计算机由运算器,控制器,存储器,输入和输出设备组成。其中运算器,只有加法运算器,没有减法运算器(据说一开始是有的,后来由于减法器硬件开销太大,被废了 )所以,计算机中的没法直接做减法的,它的减法是通过加法来实现的。你也许会说,现实世界中所有的减法也可以当成加法的,减去一个数,可以看作加上这个数的相反数。当然没错,但是前提是要先有负数的概念。这就是引入符号位的原因。而原码、反码、补码的产生过程,就是为了解决计算机做减法和引入符号位(正号和负号)的问题。一、原创 2020-09-07 08:19:35 · 423 阅读 · 0 评论 -
IO多路复用:select、poll、epoll
I/O多路复用的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。select、poll和epoll都是Linux API提供的IO复用方式...原创 2020-09-04 13:54:50 · 232 阅读 · 0 评论 -
Linux-页、页表、页框(块)+虚拟内存
在Linux操作系统中,CPU在执行一个进程的时候,都会访问内存。但CPU并不是直接访问物理内存地址,而是通过虚拟地址空间来间接的访问物理内存地址。所谓的虚拟地址空间,是操作系统为每一个正在执行的进程分配的一个逻辑地址,在32位机上,操作系统通过将虚拟地址空间和物理内存地址之间建立映射关系,让CPU间接的访问物理内存地址。通常将虚拟地址空间以512Byte ~ 8K,作为一个单位,称为页,并从0开始依次对每一个页编号。这个大小通常被称为页面将物理地址按照同样的大小,作为一个单位,称为框或者块,也从0开原创 2020-10-13 15:37:06 · 1971 阅读 · 2 评论 -
Linux系统结构以及用户态和核心态
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。一、linux内核Linux内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等,如下图所示:系统调用接口(System Call Interface):SCI提供了某些机制,执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI实际上是一个非常有用的函数调用多原创 2020-10-09 17:58:21 · 1062 阅读 · 0 评论 -
死锁的概念及如何避免死锁
一、资源问题在系统中有许多不同类型的资源,其中可以引起死锁的主要是,需要采用互斥访问方法的、不可被抢占的资源,即临界资源。系统中这类资源有很多,如打印机、数据文件、队列、信号量等。1.1 可重用性资源和消耗性资源1.1.1 可重用性资源可重用性资源是一种可供用户重复使用多次的资源待补充1151.2 可抢占性资源和不可抢占性资源1.2.1 可抢占性资源可把系统中的资源分成两类,一类是可抢占性资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统抢占。例如优先级高的进程可以抢占优先级低的原创 2020-09-17 13:22:58 · 5085 阅读 · 0 评论 -
系统调用的概念和类型
程序接口,是OS专门为用户设置的,提供给程序员在编程时使用,也是用户程序取得OS服务的唯一途径。它是由一组系统调用(system call)组成,因而,也可以说,系统调用提供了用户程序和操作系统内核之间的接口。系统调用不仅可供所有的应用程序使用,而且也可供OS自身使用。在每个系统中,通常都有几十条甚至上百条的系统调用,并可根据其功能把它们划分成若干类,每一个系统调用都是一个能完成特定功能的子程序。一、基本概念1.1 系统态和用户态在计算机系统中设置了两种状态:系统态(或称为核心态)和用户态。在实际运原创 2020-09-16 09:51:32 · 2254 阅读 · 0 评论 -
协程
线程是为了解决阻塞和并发的并发问题(在一段时间内执行更多的程序),类似的,协程也是为了在一段时间运行更多的“程序”(应该说是函数)并且避免线程阻塞。有了之前的铺垫,类比起来讲协程就很容易了。线程和协程解决的并发问题不是一个问题,线程是为了让操作系统并发运行程序,以达到“同时”运行更多程序的目的,而协程是为了让一个线程内的程序并发服务更多内容,这里我不太好解释,一个直观的例子就是一个单线程的服务器程序同时服务多个用户,如何做到服务更多用户?想想线程是怎么来的,我们只需要把这个线程中的程序继续细分,然后像时间原创 2020-09-16 09:36:46 · 151 阅读 · 0 评论 -
Java中的管程Monitor
一、什么是管程管程是一个抽象的概念模型,其封装了一套对共享资源访问的模型,目的是通过一个模型来管理共享资源的访问过程,让可能存在多个进程或线程同时访问一个共享资源时能达到"互斥"和"同步"的效果,管程实现管程模型必须达到下面几点要求:管程中的共享变量对于外部都是不可见的,只能通过管程才能访问对应的共享资源管程是互斥的,某个时刻只能允许一个进程或线程访问共享资源管程中需要有线程等待队列和相应的等待或唤醒操作必须有一种方法使进程无法继续运行时被阻塞二、Java管程Java是通过synchron原创 2020-09-13 11:38:15 · 924 阅读 · 0 评论 -
进程间的通信方式
一、进程通信的类型随着OS的发展,用于进程之间实现通信的机制也在发展,并已由早期的低级进程通信机制发展为能传送大量数据的高级通信工具机制。目前,高级通信机制可归结为四大类;共享存储器系统、管道通信系统、消息传递系统和客户机、服务器系统1.1 共享存储器系统在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能通过这些空间进行通信。据此,又可把它们分成以下两种类型:1.1.1 基于共享数据结构的通信方式在这种通信方式中,要求诸进程公用某些数据结构,借以实现进程间的信息交换,如在.原创 2020-09-06 00:56:06 · 1906 阅读 · 1 评论 -
阻塞、非阻塞、同步、异步的区别
我们在进行编程开发的时候,经常会涉及到同步、异步、阻塞、非阻塞、IO多路复用等概念,这几个概念有区别,但是有时候也容易混淆,下面记录下这几个概念的理解。一、Unix网络编程中的五种IO模型Blocking IO-阻塞IONoneBlocking IO-非阻塞IOIO multiplexing-IO多路复用signal driven IO-信号驱动IOasynchronous IO-异步IO由于信号驱动IO在实际使用中并不常见,所以下面只讨论剩下的四种IO模型。在讨论之前先说明下IO发生时原创 2020-09-04 14:41:46 · 142 阅读 · 0 评论 -
进程同步
在OS中引入进程后,一方面可以使系统中的多道程序并发执行,这不仅能有效地改善资源利用率,还可以显著地提高系统的吞吐量,但另一方面却使系统变得更加复杂。如果不能采取有效的措施,对多个进程的运行进行妥善的管理,必然会因为这些进程对系统资源的无序争夺给系统造成混乱。致使每次处理的结果存在不确定性,即显现出其不可在现性。。为保证多个进程能有条不紊地运行,在多道程序系统中,必须引入进程同步机制。接下来将详细介绍单处理机系统中的进程同步机制-硬件同步机制、信号量同步机制、管程机制等,利用它们来保证程序执行的可再现性。原创 2020-09-03 14:28:20 · 1034 阅读 · 0 评论 -
中断是什么
一、中断简介1.1 中断和陷入1.1.1 中断中断是指CPU对I/O设备发来的中断信号的一种相应。CPU暂停正在执行的程序,保留CPU环境后,自动地去执行该I/O设备的中断处理程序。执行完后,再回到断点,继续执行原来的程序。I/O设备可以是字符设备,也可以是块设备、通信设备等。由于中断是由外部设备引起的,故又称外部中断1.1.2 陷入另外还有一种由CPU内部事件所引起的中断,例如进程在运算中发生了上溢或下溢,又如程序出错,如非法指令、地址越界、以及电源故障等。通常把这类中断称为内中断或陷入(tra原创 2020-08-29 11:50:48 · 3784 阅读 · 0 评论 -
缓存失效的经典问题
一、缓存穿透1.1 定义指查询的数据,在数据库不存在的情况。这样程序会先访问cache,没有找到数据,再查询数据库,也没有找到,然后返回空。如果恶意大量的访问数据库中不存在的数据,造成资源浪费,对数据库造成压力,甚至会导致业务不可用,甚至压垮数据库。1.2 解决方法空值缓存,即如果数据库查询的时候,没有查询到数据,也将空值缓存到cache中,并设置过期时间(相对普通的数据,过期时间设置较短,避免占用过大的存储空间),这样就避免造成对数据库的压力。二、缓存雪崩2.1 定义指在某一时间段内,缓存数原创 2020-08-27 00:24:26 · 408 阅读 · 0 评论 -
缓存
一、介绍1.1 什么是缓存缓存就是数据交换的缓冲区,当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时再从磁盘中读取。由于缓存的数据比磁盘快的多,所以缓存的作用就是帮助硬件更快的运行。缓存往往使用的是RAM(断电即掉的非永久存储),所以在用完以后还是会把文件送到硬盘等存储器中永久存储。电脑中最大的缓存就是内存条。高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。一般CPU工作速度高,但内存的工作速度相对较低,为了解决这个问题,通常使用高速缓存,高速缓存的存取速度介于CP原创 2020-08-26 23:56:14 · 135 阅读 · 0 评论