
操作系统
Jaymeng8848
攀爬每一个巨人,站在他们肩膀上看一看
展开
-
操作系统(二)
第三章:处理机调度与死锁1、处理机调度的三个层次高级调度(也称为作业调度、宏观调度、长程调度):用于决定外存上处于后备队列中的哪些作业调入内存,并为他们创建进程、分配必要的资源,再将新创建的进程排在就绪队列上,准备执行。作业调度应解决的两个问题:接纳多少作业? 取决于多道程序度接纳哪些作业? 取决于所采用的调度算法,如先来先服务调度算法、短作业有限调度算法等中级调度(又称中程调度):涉及进程在内、外存间的交换,从存储器资源管理的角度来看,把进程的部分或全部换出到外存上,可为当前运行进程转载 2020-11-03 19:49:07 · 1975 阅读 · 0 评论 -
操作系统(一)
第一章 操作系统引论1、操作系统是什么?操作系统为用户完成所有“硬件相关,应用无关“的工作,以给用户方便、高效、安全的使用环境1.1、定义:操作系统是一个大型的程序系统,它负责计算机的全部软、硬件资源的分配、调度工作,控制并协调多个任务的活动,实现信息的存取和保护。它提供用户接口,使用户获得良好的工作环境。1.2、目标(1)、方便性:配置OS后计算机系统更容易使用(2)、有效性:改善资源利用率;提高系统 吞吐量(3)、可扩充性:OSde结构(如层次化的结构:无结构发展->模快化结构-&转载 2020-11-03 17:27:23 · 1696 阅读 · 0 评论 -
可重入函数与不可重入函数
在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:(1)函数体内使用了静态的数据结构;(2)函数体内调用了malloc()或者free()函数;(3)函数体内调用了标准I原创 2020-09-18 11:21:15 · 215 阅读 · 0 评论 -
存储管理知识点与例题
1、存储器:速度:寄存器---->主存---->辅存容量:辅存---->主存---->寄存器2、高速缓存和磁盘缓存:高速缓存:解决cpu与主存之间速度不平衡磁盘缓存:解决主存与磁盘之间速度不平衡,他是内存中开辟的一个区间,并不是实际存在的一个存储器3、程序的运行过程:编译、连接、装入编译:将命名空间编程逻辑地址链接:链接是指将这组目标模块以及所需的库函数装配成一个完整的装入模块1、静态链接2、装入时动态链接3、运行时动态链接装入:将模块装入内存1、绝对装入转载 2020-09-18 09:08:01 · 728 阅读 · 0 评论 -
存储管理
存储管理功能存储分配和去配分配去配对象内存、外存(相同方法)分配去配时刻进程创建、撤销、交换、长度变化(栈溢出, execl)当处于外存的部分需要调入内存时,操作系统应为其分配内存空间,同时收回外存空间当处于内存的部分需要调出内存时,操作系统应为其分配外存空间,同时收回内存空间分配表:记录已经分配的区域空闲表:记录尚未分配的区域存储共享:两个或多个进程共用内存中的相同区域目的:节省内存、相互通讯内容:代码、数据存储保护防止地址越界:每个进程都具有相对独立的进程空间。如果进程在运转载 2020-09-17 13:28:40 · 581 阅读 · 0 评论 -
线程同步的四种常用方式
一、 临界区(CCriticalSection)当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。具体应用方式:1、 定义临界区对象CcriticalSection g_CriticalSection;2、 在访问共享资源(代码或变量)之前,先获得临界区对象,g_CriticalSection.Lock();3、 访问共享资源后,则放弃临界区对象,g_CriticalSectio转载 2020-09-17 11:03:21 · 2178 阅读 · 0 评论 -
进程间通信的五种方式
进程间通信的意思就是在不同进程之间传递信息。它是一组编程接口,让程序员协调不同进程,使能够相互传递消息。IPC目的1)数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。4)资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。5)进程控转载 2020-09-17 10:56:11 · 4666 阅读 · 0 评论 -
Linux下的PCB结构体
进程的主要信息:1、pid_t pid标识符:与进程相关的唯一标识符,区别正在执行的进程和其他进程2、状态:描述进程的状态,因为进程有阻塞、挂起、运行等好几个状态,所以都有个表示符来记录进程的执行状态。3、优先级:如果有好几个进程正在执行,就涉及到进程的执行的先后顺序,这和进程的优先级这个标识符有关。4、程序计数器:程序中即将被执行指令的下一条地址。5、内存指针:程序代码和进程相关数据的指针。6、上下文数据:进程执行时处理器的寄存器中的数据。7、I/O状态信息:包括显示的I/O请求,分配给进程原创 2020-09-17 10:33:56 · 1655 阅读 · 0 评论 -
进程以及PCB
进程基本概念:进程的产生是因为为了使程序能并发执行,且为了对并发执行的程序加以描述和控制。进程的结构:程序段、相关的数据段和 PCB (进程控制块Process Control Block)。进程跟程序是不同的,进程是动态的,程序是静态的,进程有创建,执行,消亡,所以进程实体是有生命周期的,而程序只是一组有序指令的集合。可以总结一下:(1) 进程是程序的一次执行。(2) 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。(3) 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调转载 2020-09-17 10:05:39 · 2116 阅读 · 1 评论 -
DMA(Direct Memory Access)
1、DMA由来DMA(Direct Memory Access,直接存储器访问)。在DMA出现之前,CPU与外设之间的数据传送方式有程序传送方式、中断传送方式。CPU是通过系统总线与其他部件连接并进行数据传输。1.1程序传送方式程序传送方式是指直接在程序控制下进行数据的输入/输出操作。分为无条件传送方式和查询(条件传送方式)两种。1.1.1无条件传送方式微机系统中的一些简单的外设,如开关、继电器、数码管、发光二极管等,在它们工作时,可以认为输入设备已随时准备好向CPU提供数据,而输出设备也随时准备转载 2020-09-15 14:49:48 · 754 阅读 · 0 评论 -
NIO相关基础
用户空间以及内核空间概念我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(转载 2020-09-15 14:33:46 · 109 阅读 · 0 评论 -
死锁以及处理策略
什么是死锁?所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。如下图所示:产生死锁的原因?可归结为如下两点:a. 竞争资源系统中的资源可以分为两类:可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU和主存均属于可剥夺性资源;另一类资源是不可剥夺资转载 2020-09-15 10:26:59 · 514 阅读 · 0 评论 -
Linux下的I/O复用与epoll详解
前言 I/O多路复用有很多种实现。在linux上,2.4内核前主要是select和poll,自Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术。尽管他们的使用方法不尽相同,但是本质上却没有什么区别。本文将重点探讨将放在EPOLL的实现与使用详解。为什么会是EPOLLselect的缺陷高并发的核心解决方案是1个线程处理所有连接的“等待消息准备好”,这一点上epoll和select是无争议的。但select预估错误了一件事,当数十万并发连接存在时,转载 2020-09-15 09:56:10 · 126 阅读 · 0 评论 -
select,poll,epoll
缓存I/O缓存I/O又称为标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存中,即数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。五种IO模型阻塞式I/O模型:默认情况下,所有套接字都是阻塞的。recvfrom等待数据准备好,从内核向进程复制数据。非阻塞式I/O: 进程把一个套接字设置成非阻塞是在通知内核,当所请求的I/O操作非得把本进程投入睡眠才能完成时,不要把进程转载 2020-09-15 09:07:39 · 93 阅读 · 0 评论 -
IO设计模式:Actor、Reactor、Proactor
先介绍两种高性能服务器模型Reactor、ProactorReactor模型:1 向事件分发器注册事件回调2 事件发生4 事件分发器调用之前注册的函数4 在回调函数中读取数据,对数据进行后续处理Reactor模型实例:libevent,Redis、ACEProactor模型:1 向事件分发器注册事件回调2 事件发生3 操作系统读取数据,并放入应用缓冲区,然后通知事件分发器4 事件分发器调用之前注册的函数5 在回调函数中对数据进行后续处理Preactor模型实例:ASIOreact转载 2020-09-15 08:53:58 · 764 阅读 · 0 评论 -
IO多路复用机制
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型转载 2020-09-15 08:43:10 · 155 阅读 · 0 评论 -
mmap的解析
前言看这篇文章之前需要知道一个概念虚拟内存系统通过将虚拟内存分割为称作虚拟页(Virtual Page,VP)大小固定的块,一般情况下,每个虚拟页的大小默认是4096字节。同样的,物理内存也被分割为物理页(Physical Page,PP),也为4096字节。一、mmap基本原理和分类在LINUX中我们可以使用mmap用来在进程虚拟内存地址空间中分配地址空间,创建和物理内存的映射关系。映射关系可以分为两种1、文件映射磁盘文件映射进程的虚拟地址空间,使用文件内容初始化物理内存。2、匿名映射转载 2020-09-15 08:28:13 · 1049 阅读 · 0 评论 -
既然操作系统层已经提供了page cache的功能,为什么还要在应用层加缓存?
操作系统的磁盘操作已经提供了page cache,比如Linux会把所有未使用的内存用作page cache,那么我们为什么还需要加那么多层缓存?DB有自己的缓存,为什么我们还需要像memcached这样的应用层缓存?1简单说,OS提供了一个通用的选择,没办法针对应用做个性化定制。kafka基本是顺序读写,这点是OS缓存可以很好的处理的情况;但是对于更多应用层系统来说,存在数据热点分布不均的情况,这些OS就不能很好的处理了。例如MySQL的innoDB缓存,如果采用OS的缓存策略,来一次全表扫描那么就可转载 2020-08-17 10:47:50 · 514 阅读 · 0 评论