操作系统学习笔记——总体总结

article/2025/9/28 10:20:49

看书太慢容易抓不住重点,所以在此按照操作系统的主要内容分别查网上博客资料进行学习。

一、引论

操作系统基本特性:

并发:

1.并行与并发:并行性是指两个或多个时间在同一时刻发送;并发性是指两个或多是事件在同一时间间隔内发生。

2.引入进程:进程是指在系统中能独立运行并作为资源分配的基本单位,是一个能独立运行的活动实体,多个进程之间可以并发执行和交换信息。(进程的并发和线程的并发??)

共享:

1.互斥共享:系统中某些资源虽然可以提供给多个线程(进程使用),但在规定的时间内,只允许一个进程访问该资源,这种资源称为临界资源或独占资源。计算机系统中的大多数物理设备,以及某些软件中所用的栈、变量和表格,都属于临界资源。

2.同时访问:系统中还有另一种资源,允许在一段时间内由多个进程“同时”对他们访问。这里的“同时”在单处理机环境下往往是宏观上的,而在微观上这些进程是交替地对该资源进行访问。

并发和共享是多用户操作系统的两个组基本的特性

虚拟技术:

概念:通过某种技术把一个物理实体变为若干个逻辑上的对应物。

1.时分复用技术:

概念:时分复用技术即分时使用技术

虚拟处理机技术:利用多道程序设计技术,为每道程序建立一个进程,让多道程序处理机的空闲时间来运行其他的程序,使处理机的利用率得以提高。我们把用户所感觉到的处理机称为虚拟处理器。时分复用技术是利用处理机的空闲时间来运行其他程序,使得处理机的利用率得以提高。

虚拟设备技术:我们还可以通过虚拟设备技术,将一台物理I/O设备虚拟为多台逻辑上的T/O设备,并允许每个用户占用一台逻辑上的I/O设备,这样便可使原来仅允许在一段时间内有一个用户访问的设备(即临界资源),变为在一段时间内允许多个用户同时访问的共享设备。

2.空分复用技术

空分复用技术的两种实现:

虚拟磁盘技术:

虚拟存储器技术:空分复用则是利用存储器的空闲空间来存放其他的程序以提高内存的利用率。但是,单纯的空分复用存储器之鞥呢提高内存的利用率,并不能实现在逻辑上扩大存储。虚拟存储技术本质上是内存分时复用,可以使一道程序通过时分复用方式,在远小于它的内存空间上运行。

异步性:

进程是以人们不可预知的速度向前推进此即进程的异步性(asynchronism)。

 

 

多道批处理、分时、实时 操作系统各自的特点:

批处理系统:

主要用于大型系统,用于提高作业吞吐量(单位时间内执行作业的数量)的系统。

批处理中基本无交互,存在两种调度:

1.job schedule(作业调度),即将所要做的作业放到内存上,主要负责作业的道数,属于高级调度。

2.cpu schedule(进程调度),即在内存中CPU选择执行某个工作,属于低级调度。

多道程序系统(multiprogranmming system):(现代操作系统第四版上有详细概念)

优点:

1.improve cpu utilization,然而另一方面程序道数越多,系统消耗越高,也会造成CPU有效利用率降低。

2.improve memory and I/O device utilization.

3.increase system throughout 

特点:

1.多道

2.无序(unordered),执行是无序的,即用户不知道进程状态,但系统知道当前进程的状态

3.调度性(scheduling)

缺点:交互性低

分时系统(time-sharing system)

定义:将CPU的执行时间分成一个个的时间片(time slilce),多用户中的每个用户轮转时间片,非常适合交互性作业。

Memory sharing(储存共享)+time sharing(时间共享)->multiprograming(多道系统)+interaction(交互 )

时间片的选择必须大于系统内的中断切断时间,且时间段切换需要有度!!!

分时系统特点:

1.交互性强,因其主要为交互性作业设计;

2.多道(路)性;

3.及时性;

4.独占性。

影响分时操作系统性能的因素:

1.用户数目

2.时间片大小;

3.每次时间片切换时对换的数据量。

分时系统是一个通用系统,即不限制任务的数目和状态。

实时系统(real-time systems)

1.定义:实时系统主要用于专用系统(used in dedicated application),有着非常严格的固定时间要求(well-defined fixed-time constraints)。按照deadline不同可分为硬实时(hard real-time)和软实时(soft real-time):

硬实时操作系统:deadline要求高,即要求在很短的时间片内处理

1).Secondary storage (disk)  limited or absent; 限制二次存储或者没有二次存储(硬盘);

2).Data stored in memory, or read-only memory (ROM). 

软实时操作系统:deadline要求较低,即可在较长时间片内处理,但是,还是需要在一个时间片内处理

1).limited utility in industrial control of robotics 

2).useful in multimedia, virtual reality, etc

2.实时操作系统特性:

1).及时性;

2).独占性(双工:两端都有计算机做相同操作以防另一端计算机出现故障,用于火箭和导弹控制)

3).多路性;

4).交互性

二、进程的描述与控制

程序并发执行的特征

间断性:程序在并发执行的时候,因为共享资源以及需要相互合作来完成同一项任务,致使并发执行的程序之间相互制约,

所以程序需要:执行-暂停-执行

失去封闭性:当系统中有多个并发执行的程序时,各个资源是他们所共享的,所共享的资源的状态会因这些程序而改变,所以一个程序的运行环境会受其他程序的影响。

不可再现性(程序一旦失去封闭性也就不可再现)

进程的特征与三种基本状态

两个重要概念:

1.地址空间:操作系统在管理内存时,每个进程都有一个独立的进程地址空间,进程地址空间的地址为虚拟地址。

2.进程表:为实现进程模型,操作系统需要维护这一张表格(一个结构数组),即进程占用一个进程表。每个进程占用一个进程表项(即进程控制块)。(存放进程的管理和控制信息的数据结构成为进程控制块(PCB),是进程管理和控制的最重要的数据结构。每个进程都有个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤销而撤销。)

特征:

1.动态性 2.并发性 3.独立性 4.异步性

状态:

1.就绪态 2.运行态 3.阻塞态

三种状态之间的转换:

处于就绪状态的进程在调度程序为其分配了处理机之后便开始执行, 就绪->执行

正在执行的进程如果因为分配给他的时间片已经用完而被剥夺处理机, 执行->就绪

如果因为某种原因只是当前进程执行受阻,使之不能执行, 执行->阻塞

创建状态和终止状态图:

进程控制块PCB

概念:

存放进程的管理和控制信息的数据结构成为进程控制块(PCB),是进程管理和控制的最重要的数据结构。每个进程

都有个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤销而撤销。

包含的内容:

在不同的操作系统中对进程的控制和管理机制不同,PCB的信息多少也不一样,通常PCB应包含如下一些信息:

1.进程标识符name:

每个进程都必须有一个唯一的标识符,可以是字符串也可以使一个数字,UNIX系统中就是一个整形数,在进程创建时又

系统赋予。

2.进程前状态status:

说明进程前所处的状态。为了管理方便,系统设计时会将相同状态的进程组成一个队列,如就绪进程队列,等待进程则要求

根据等待的事件组成多个等待队列,如等待打印机队列,等待I/O完成队列等。

3.进程相应的程序和数据地址,以便把PCB与其程序和数据联系起来。

4.进程资源清单。列出所有的除CPU外的资源清单,如拥有的I/O设备,打开的文件列表等。

5.进程优先级priority:

进程的优先级反应进程的紧迫程度,通常由用户指定和系统设置。

6.CPU现场保护区CPUstatus:

当进程因某种原因不能继续占用CPU时,释放CPU,这时就要将CPU的各种状态信息保护起来,以便于将来再次得到处理机恢复CPU的各种状态。

7.进程同步和通信机制:

用户实现进程间互斥、同步和通信所需的信号量等。

8.进程所在队列的链接字:根据进程所处的现行状态,进程相应的PCB参加到不同的队列中,PCB链接字指出该进程所在队列中下一个进程PCB的首地址。

9.与进程有关的其他信息,如进程记账信息,进程占用CPU的时间等。

进程控制块PCB的作用:

1.作为独立运行基本单位的标志

2.能实现间断性运行方式。

3.提供进程通信管理所需要的信息。

4.提供进程调度所需要的信息。

线程和进程的区别联系:

定义:

1.进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。(包括程序段,相关数据段,进程控制块PCB)

2.线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可以与同属一个进程的其他的线程共享进程所拥有的全部资源。

关系:

一个线程可以创建和撤销另一个线程;同一个进程中的多个进程之间可以并发执行,相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

区别:它们有不同的操作系统资源管理方式。进程拥有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉会造成整个进程死掉,所以多进程的程序要比多线程的程序更健壮,但在进程切换时,耗费资源较多,效率要较差些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

优缺点:线程执行开销小,但不利于资源的管理和保护;进程则相反。线程适合于在SMP机器上进程,而进程则可以跨机器迁移。

进程间的通信是如何实现的:

早期低级通信的缺点:

1.效率低,生产者每次只能想缓冲池投放一个信息

2.通信对用户不透明,隐藏了通信的具体细节。

现在发展为高级通信:(进程间通信方式:)

1.共享内存区

能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全。当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存。

2.消息队列

容易受到系统限制,且注意第一次读时,要考虑上一次没有读完数据的问题。

3.管道

速度慢,容量有限,只有父子进程能通讯

4.FIFO

命名管道,任何进程间都能通讯,但速度慢。

5.信号量

不能传递复杂消息,只能用来同步。

6.套接字(socket)和信号支持不同主机上的两个进程IPC

详细解释见:https://blog.csdn.net/EveryFriDay_ShuJk/article/details/79783334

补充:linux进程间通信的方式:https://blog.csdn.net/godleading/article/details/78391159

什么是临界区?如何解决冲突?

每个进程中访问临界资源(临界资源是一次仅允许一个进程使用的共享资源)的那段程序成为临界区,每次只允许一个进程进入临界区,进入后不允许其他进程进入。

1.如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。

2.任何时候,处于临界区的进程不可多于一个,如已有进程进入自己的临界区,则其他所有试图进入临界区的进程必须等待。

3.进入临界区的进程要在有限时间内退出,以便其他进程能及时进入自己的临界区。

4.如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

进程同步原则:(进程同步详解:https://blog.csdn.net/bigpudding24/article/details/48608537)

进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。同步机制遵循的原则:

1.空闲让进;

2.忙则等待(保证对临界区的互斥访问);

3.有限等待(有限代表有限的时间,避免死等);

4.让权等待,(当进程不能进入自己的临界区时,应释放处理机,以免陷入忙等状态)。

进程同步:由于进程同步产生了一些列经典的同步问题“生产者-消费者”问题,“哲学家进餐”问题,“读者-写者”问题。

程序和进程的区别

程序:计算机指令的集合,以文件的形式存储在磁盘上。程序是静态实体,在多道程序系统中,它是不能独立运行的,更不能与其他程序并发执行。

使用系统资源情况:不使用(程序不能申请系统资源,不能被资源调度,也不能作为独立运行的大卫,它不占用系统的运行资源)。

进程:进程是进程实体(包括:程序段,相关的数据段,进程控制块PCB)的运行过程,是一个程序在其自身的地址空间中的一词执行活动。是系统进行资源分配和调度的一个独立单位。

使用系统资源情况:使用(进程是资源申请、调度和独立运行的单位)

三、处理机调度与死锁

处理机调度的层次:(https://blog.csdn.net/qq_28602957/article/details/53365757)

1.高级调度

主要用于多道批处理系统中,又称长作业调度,调度队像是作业,根据某种算法决定将后备队列中的哪几个作业调入内存。

2.低级调度

操作系统中最基本的一种调度方式(频率最高),在多道批处理、分时和实时三种类型的操作系统中都存在,又称为短作业调度。

3.中级调度

又称为内存调度,目的是为了提高内存的利用率和系统的吞吐率。

作业调度的算法:

1.先来先去服务算法(FSFS)

最简单的调度算法,既可以用于作业调度也可以用于进程调度,系统按照作业到达的先后顺序进行调度,或者是优先考虑在系统中等待时间最长的作业。

2.短作业优先调度算法(SJF)

实际情况短作业占有比例很大,为了使他们比长作业优先执行,而产生了短作业优先调度算法,作业越短优先级越高。

缺点:必须知道作业的运行时间,对长作业不利,人机无法实现交互,未完全考虑作业的紧迫程度。

3.优先级调度算法(PSA)

优先级:对于先来先服务算法,作业的等待时间就是他的优先级, 等待时间越长优先级越高,对于短作业优先级作业的长短就是他的优先级。在优先级算法中,基于作业的紧迫程度。

4.高响应比优先调度算法(HRRN)

在FSFS中只是考虑作业的等待时间而忽略作业的运行时间,SJF算法正好相反,高响应比算法既考虑作业的等待时间有考虑作业的运行时间,

    优先权 =  (等待时间+要求服务时间)/要求服务时间

    由于等待时间与服务时间之和就是作业的响应时间,故优先级相当于响应比:Rp

    Rp = (等待时间+要求服务时间)/要求服务时间 = 响应时间/要求服务时间

什么是死锁,死锁产生的四个条件

死锁定义

在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是两个或多个进程被无限期地阻塞、相互等待的一种状态。

产生条件:

1.互斥条件:一个资源一次只能被一个进程使用

2.请求保持条件:一个进程因请求资源而阻塞时,对已经获得的资源保持不放。

3.不可抢占条件:进程已获得的资源在未使用完之前不能强行剥夺。

4.循环等待条件:若干进程之间形成一种头尾衔接的循环等待资源的关系

预防避免死锁的方法(https://www.cnblogs.com/loren-Yang/p/7577373.html)

1.破坏“请求和保持”条件:规定所有进程在开始运行之前,都必须一次性的申请其在整个运行过程所需要的全部资源,。

优点:简单安全。

缺点:资源严重浪费,恶化了系统的利用率,

2.破坏“不剥夺”条件:进程逐个地提出资源请求,当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。

缺点:实现复杂,代价大,反复地申请和释放资源,而使进程的执行无线地推迟、延长了进程的周转时间增加系统开销、降低系统吞吐量。

3.破坏“环路等待”条件:将所有的资源按类型进行线性排队,并赋予不同的序号。所有的进程请求资源必须按照资源递增的次序提出,防止出现环路。

(为了破坏循环等待条件,可釆用顺序资源分配法。首先给系统中的资源编号,规定每进程,必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提
出申请分配资源Ri,则该进程在以后的资源申请中,只能申请编号大于Ri 的资源。这种方法存在的问题是,编号必须相对稳定,这就限制了新类型设备的增加;尽管在
为资源编号时已考虑到大多数作业实际使用这些资源的顺序,但也经常会发生作业使甩资源的顺序与系统规定顺序不同的情况,造成资源的浪费;此外,这种按规定次序申请资源的方法,也必然会给用户的编程带来麻烦。)

缺点:

1.序号必须相对稳定,限制了新设备类型的增加。

2.作业(进程)使用资源顺序和系统规定的顺序不同而造成资源的浪费。

3.限制了用户编程

注意:由于互斥条件是非共享设备所必须的,不能改变。

四、存储器管理

连续分配存储管理方式:

1.单一连续分配

2.固定分区分配

3.动态分区分配

其中动态分区分配将涉及到分区分配实际需要的数据结构,分区分配算法和分区与回收操作内存分配的流程是:

https://blog.csdn.net/xiaokang123456kao/article/details/73849310(深入了解操作系统原理值存储器管理)(一定看!!!)

https://blog.csdn.net/yilongdashi/article/details/82704815(地址重定向详解)(一定看!!!)

动态分区分配算法

1:首次适应算法(FF):    

        要求地址空间递增的顺序链接,再分配内存时从链首开始查找,直到有一个满足的空间为止。该算法优先利用内存中低址空间,保留了高址空间,缺点是低址部分不断被划分,留下许多内存碎片

  2:循环首次适应算法(NF):

        为了防止留下碎片,减少低址空间开销,NF算法每次从上一次分配的地方继续分配,该算法需要一个起始查询的指针用于指示下一次查询的空间地址。缺点是:缺乏大的空间分区

  3:最佳适应算法(BF):

        每次作业分配时,总是把满足要求,又是最小的空间分配给作业,该算法把空间分区按其容量大小从小到大排列成空闲区链,缺点是:留下许多内存碎片

  4:最坏适应算法(WF):

        总是挑选最大的空闲区域分配给作业使用,优点是不至于使空闲区间太小,产生碎片的可能性小,缺点是:缺乏大的空间分区

分页存储管理方式

分页存储管理方式的基本方法

1.页面和物理块:分页存储管理将进程的逻辑地址空间分成若干页,并从0开始编号(页面),把内存的物理地址分成若干块(物理块)

2.地址结构:两个参数:页号P、偏移量W。

对于特定的机器其地址结构一定,给定逻辑地址A,页面的大小为L,则页号P和页内地址D有以下关系:P=int[A/L]; D=A mod L

3.页表:记录相应页在内存中对应的物理块号

4.地址转换机构:将用户逻辑空间的地址转变为内存中的物理地址的机构。

分段存储管理方式:

分段管理方式引入的原因:

1.一般程序分为若干段,如:主程序段、数据段、栈段,每个段大多是一个相对独立的单位

2.实现满足信息共享、信息保护、动态链接、以及信息动态增长的需要。

分页和分段的区别:

共同点:两者都采用离散分配方式,都是依靠地址映射机构来实现地址的转换

不同点:

1.页是信息的物理单位, 采用分页存储管理方式是为了实现离散分配方法,提高内存的利用率,采用分段的目的主要在能更好地满足用户的需求。(更详细的看上面的网址)

2.页的大小固定且由系统决定,在采用分页存储管理方式中直接由硬件实现。而段的大小不固定,决定于用户所编写的程序。

3.分页的地址空间是一维的,分段的系统是二维的。

段页式存储管理方式

基本原理是分段和分页相结合,其地址结构由:段号、段内页号、页内地址三部分组成。在段页式系统中获得一条指令需要三次访问内存,第一次访问内存中的段表,第二次访问内存中的页表,第三次访问内存中的数据。

windows下的内存时如何管理的?

windows提供了3种方法来进行内存管理:

1.虚拟内存,最适合用来管理大型对象合作和结构数组。

2.内存映射管理,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据。

3.内存堆栈,最适合用来管理大量的小对象。

windows操作内存可以分两个层面:物理内存和虚拟内存。

其中物理内存由系统管理,不允许应用程序直接访问。

五、虚拟存储器

操作系统的内容分为几块?什么叫虚拟内存?他和贮存的关系如何?内存管理属于操作系统的内容吗?

操作系统的主要组成部分:进程和线程管理,存储管理,设备管理,文件管理。

虚拟内存是一些系统页文件,存放在磁盘上,每个系统页文件大小为4K,物理内存也被分页,每页大小也为4K,这样虚拟内存和物理内存也就可以对应,实际上虚拟内存就是用于物理内存的临时存放的磁盘空间。页就是内存页,物理内存中每页叫物理页,磁盘上的页文件叫虚拟页,物理也+虚拟页就是系统所有使用的页文件的总和。

请求分页管理方式

请求页表机制:作用是把用户的逻辑地址映射为内存空间的物理地址。

1.状态位P:指示页面是否调入内存,供程序访问时参考。

2.访问字段A:用于记录页面在一段时间内被访问的次数,供换出页面时参考。

3.修改位M:表示页面调入内存是否被修改过,供换页面时参考。

4.外存地址:用于指示该页在外存上指示地址。

内存分配:

最小物理块数:若采用单地址指令,且采用直接寻址(汇编语言所学),需要物理块数是2,一块用于存放指令页面,另一块用于存放数据页面。若采用间接寻址至少需要3块。

虚拟存储器页面置换算法

1.最佳置换算法(Optimal):一种理论的算法,选着淘汰的页面是以后一定不再使用的页面(理想化的),该算法无法实现,只能作为其他算法好坏的一个评价对比。

2.先进先出(FIFO)算法:总是先淘汰最先进去的页面,该算法容易实现。缺点:通常是程序调入内存的先后顺序和程序执行的先后顺序不一致,导致缺页率高。

3.最近最久未使用(LRU):FIFO算法性能差,LRU算法根据页面调入内存的先后顺序决定,因为违法预测未来的使用情况,就是用过去的使用情况作为将来的使用情况的近似。

4.最少使用算法(LFU):在每个页面设置一个移位寄存器记录该页面的访问频率,最近时期最少使用的页面被淘汰。

六、输入输出系统

IO软件的层次结构?????????????????????????

1.用户层IO软件

2.设备独立性IO软件

3.设备驱动程序

4.中断处理程序

对IO设备的控制方式:

1.使用轮询的可编程方式

CPU不停地检查设备的状态,以字节为单位,非中断方式,利用率低

2.使用中断可编程的IO方式

添加CPU中断,提高了CPU的利用率

3.直接存储方式

以数据块为单位,放宽了相应响应时间

4.IO通道的方式;

以数据块组成的一组数据为单位,大幅度提高CPU的利用率

?????????????????????????

八、磁盘存储器管理

外存的组织方式

1.连续组织方式

又称为连续分配方式,要求每一个文件分配一个相邻的盘块

优点:顺序访问容易:访问连续文件非常容易,访问速度非常快

缺点:要求为文件分配连续的空间,必须事先知道文件的长度,不能灵活的删除插入记录,动态增长的文件难分配空间。

2.链接组织方式(分为隐式链接和显式链接)

采用链接组织的方式可以为文件分配多个不连续的盘块

优点:1.消除磁盘的外部碎片,提高内存的利用率。2.对插入删除修改非常容易。3.可以适应文件的动态增长。

3.索引组织方式

分为单所以和多索引组织方式。

文件存储的组织方式

1.空闲表法

2.空闲链表法(空闲盘块链,空闲盘区链)

3.位示图法

4.成组链接法(重要)

 


http://chatgpt.dhexx.cn/article/aB0GC185.shtml

相关文章

数据库脏读、不可重复读、幻读

1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 2. 不可重复读 :是指在一个事务内&…

关于可重复读和幻读

最近看到MySQL隔离性的知识,发现网上很多人说可重复读所针对的操作是update,然后亲自试验了一把,见下文。 首先我们知道在读提交隔离级别下,同一事物A中以相同的查询语句可能得到的结果不一致的情况,即不可重复读。这是…

可重复读如何解决幻读

学习之前的疑问: 可重复读的概念 与 不可重复读的概念 行锁gap锁(间隙锁) 快照读 与 当前读区别 快照读中的MVCC 当前读中的gap锁 和 行锁 前几天面试时被问到了mysql可重复读如何解决幻读的问题,之前脑子中的概念只有增加了共享锁和排他锁进行避免&…

MySQL(四)—MVCC实现可重复读的原理

文章目录 一、MVCC概况二、MVCC实现原理1.两或三个隐藏字段。2.undo log3.一个数组4.ReadView 三、举例验证MVCC原理参考文献 一、MVCC概况 MVCC是什么?MVCC即多版本控制协议,InnoDB实现了MVCC作版本控制,防止不该被当前事务看到的数据看到。…

可重复读

《循序渐进DB2-系统管理、运行维护与应用案例》第10章锁和并发,本章首先介绍了通用的事务概念,并指出DB2在用户读取、写入数据时的加锁策略、锁模式、兼容性等。本章还介绍了在并发控制中常碰到的4种数据异常现象,同时讲述了DB2如何使用锁克服…

mysql不可重复读和重复读_脏读、幻读、不可重复读的区别是什么

脏读、幻读、不可重复读的区别:1、脏读就是指当一个事务正在访问数据,并且对数据进行了修改;2、不可重复读是指在一个事务内,多次读同一数据;3、幻读是指当事务不是独立执行时发生的一种现象。 【相关学习推荐&#xf…

Mysql如何实现可重复读

首先对于mysql来说相信也并不陌生,mysql默认的事务的隔离级别是3,即可以实现可重复读,那mysql又是怎样实现可重复读的呢? 下边进行简单的介绍 这里就要提到了mvcc,即多版本并发控制 首先先来看一个事务的执行图 此时…

MySQL 可重复读隔离级别,完全解决幻读了吗?

我在上一篇文章中提到,MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读现象(并不是完全解决了),解决的方案有两种: 针对快照读(普通 select 语句)&am…

MySQL可重复读-问题实践

MySQL可重复读之幻读问题 MySQL事务存储引擎InnoDB的默认隔离级别为可重复读,在该隔离级别下,可以很大程度上避免幻读的问题,完全避免脏读和不可重复读问题,接下来通过实际的测试看看这些场景是否真的能够被完全避免 模拟均基于…

可重复读下的幻读

在事务执行过程中,另一个事务将新记录添加到正在读取的事务中时,会发生幻读(事务隔离级别为可重复读REPEATABLE-READ)。当执行SELECT … WHERE语句时未对where范围锁定,则可能会发生幻读。幻读是不可重复读的一种特殊情…

MySQL可重复读应用场景_mysql-repeatable read 可重复读隔离级别-幻读实例场景

本文详解 repeatable read 可重复读 隔离级别产生的影响(幻读) -- SERIALIZABLE serializable 序列化 ;一个个事务排成序列的形式。事务一个挨一个执行,等待前一个事务执行完,后面的事务才可以顺序执行 -- REPEATEABLE READ repeatable read …

MySQL可重复读级别能够解决幻读吗

引言 之前在深入了解数据库理论的时候,了解到事物的不同隔离级别可能存在的问题。为了更好的理解所以在MySQL数据库中测试复现这些问题。关于脏读和不可重复读在相应的隔离级别下都很容易的复现了。但是对于幻读,我发现在可重复读的隔离级别下没有出现&…

mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...

MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的。 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不做,其实不是没做,是可能做…

mysql可重复读 加锁_mysql可重复读隔离级别加锁分析

问题 myql可重复读隔离级别下可能会导致插入阻塞,问题复现如下 表中有3列都是int类型 其索引情况如下: id为主索引,c,d为普通索引 现在开始制作问题: 在这里我分别开启两个事务:第一个事务中执行一个update 语句更新一…

可重复读实现原理

不可重复读:事务A多次读取同一个数据,事务B在事务A多次读取的过程中,对数据作了更新,导致事务A多次读取同一个数据时,结果不一致。(比如修改行数据) 幻读:事务A 按照一定条件进行数据…

mysql “可重复读“ 解决了哪些问题,没有解决哪些问题?

可重复读解决了更新带来的不可重复读问题,但是没有解决插入或者删除带来的幻读问题。这句话,是老八股文了。 但真实情况是这样的吗?这个验证不麻烦,我们可以动手来验证一下。 我使用的是免安装版本的windows mysql8.0.31&#xff…

透彻解读mysql的可重复读、幻读及实现原理

目录 一、事务的隔离级别 二、mysql怎么实现的可重复读 举例说明MVCC的实现 MVCC逻辑流程-插入 MVCC逻辑流程-删除 MVCC逻辑流程-修改 MVCC逻辑流程-查询 三、幻读 快照读和当前读 四、如何解决幻读 事务隔离级别有四种,mysql默认使用的是可重复读&#x…

前端开发:a标签实现下载功能

应用背景 前端项目实现下载文件的功能,在后台没给我们撸接口的情况下,我们可以利用a标签实现下载功能,而且贼简单~ 实现原理 通过a标签的download的属性,将需要下载的文件放在前端项目中,然后href属性访问文件路径&a…

a标签/js下载文件(2020)

a标签/js 下载服务器文件 一、二进制式下载1、responseType(请求)2、Content-Type(响应)判断是普通数据还是文件流(可选)3、Content-Disposition(响应)和文件名(可选&…

a标签下载pdf文件

通过a标签的download属性可以实现下载pdf文件,不过有一个弊端:网站和pdf文件必须在同一域名下才可行,不然就是先打开一个新标签预览,然后点击下载按钮进行下载。