
操作系统
操作系统
大虎牙
一物不知 深以为耻 便求知若渴
展开
-
学习笔记 | Linux 五种IO模型
在网络环境下,通俗的讲,将IO分为两步:1.等;数据准备~2.数据搬迁。如果要想提高IO效率,需要将等的时间降低。IO相关概念同步阻塞:小明一直盯着下载进度条,到100%的时候就完成。同步体现在:等待下载完成通知;阻塞体现在:等待下载完成通知过程中,不能做其他任务处理;同步非阻塞:小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到100%就完成。同步体现在:等待下载完成通知;非阻塞体现在:等待下载完成通知过程中,去干别的任务了,只是时不时会瞄一眼进度条;【小明必须要在两原创 2020-09-16 20:23:39 · 377 阅读 · 0 评论 -
学习笔记 | 01 CPU是什么?
1.1 CPU的内部结构解析程序运行流程CPU的四个构成部分1.2 CPU是寄存器的集合体程序员眼中的CPU (CPU是寄存器的及集合体)1.3 决定程序流程的程序计数器程序计数器决定着程序的流程。1.4 条件分支和循环机制1.5 函数的调用机制1.6 通过地址和索引实现数组1.7 CPU的处理其实很简单外围设备:指的是连接到计算机的键盘、鼠标、显示器、设备装置、打印机等。...原创 2020-09-13 15:26:08 · 310 阅读 · 0 评论 -
学习笔记 | 时间局部性和空间局部性
在CPU访问寄存器时,无论是存取数据还是存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。局部性原理又分为时间局部性(temporal locality) 和空间局部性 (spatial locality) 。1. 时间局部性:如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因: 是由于在程序中存在着大量的循环操作。被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。2. 空间..原创 2020-09-09 15:32:21 · 5367 阅读 · 0 评论 -
学习笔记 | 处理机调度 作业调度、内存调度、进程调度
进程调度的时机进程的切换与过程原创 2020-09-01 22:35:07 · 728 阅读 · 0 评论 -
学习笔记 | 递归锁?
递归锁?线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。 互斥锁为资源引入一个状态:锁定/非锁定。某个线程要更改共享数据时,先将其锁定, 此时资源的状态为“锁定”,其他线程不能更改; 直到该线程释放资源,将资源的状态 变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。读写锁从广义的逻辑上讲,也可以认为是一种共享版的互斥锁。如果对一个临界区大部分是读操作而只有少量的写操作,读写锁在一定程度上能够降低线原创 2020-08-27 23:56:58 · 553 阅读 · 0 评论 -
学习笔记 | 孤儿进程和僵尸进程的区别?守护进程?
孤儿进程和僵尸进程的区别?怎么避免这两类进程?守护进程?1、 一般情况下,子进程是由父进程创建,而子进程和父进程的退出是无顺序的,两者 之间都不知道谁先退出。正常情况下父进程先结束会调用wait或者 waitpid 函数 等待子进程完成再退出,而一旦父进程不等待直接退出,则剩下的子进程会被 init(pid=1)进程接收,成会孤儿进程。(进程树中除了 init 都会有父进程)。2、如果子进程先退出了,父进程还未结束并且没有调用 wait或者 waitpid 函数获取 子进程的状态信息,则子进程残留的状态原创 2020-08-27 23:51:00 · 1482 阅读 · 0 评论 -
学习笔记 | 线程安全?如何实现?加锁、非阻塞同步、线程本地化
线程安全?如何实现?如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的; 若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。对于线程不安全的对象我们可以通过如下方法来实现线程安全:加锁 利用 Synchr原创 2020-08-27 23:28:54 · 333 阅读 · 0 评论 -
学习笔记 | 进程的创建过程?需要哪些函数?需要哪些数据结构?
01 进程的创建过程?需要哪些函数?需要哪些数据结构?fork函数创造的子进程是父进程的完整副本,复制了父亲进程的资源,包括内存的内 容 task_struct 内容;vfork创建的子进程与父进程共享数据段,而且由vfork创建的子进程将先于父进程运行;linux上创建线程一般使用的是pthread库,实际上linux也给我们提供了创建线程 的系统调用,就是 clone;02 进程创建子进程,fork详解函数原型pid_t fork(void); //void 代表没有任何形式参数原创 2020-08-27 22:45:44 · 654 阅读 · 0 评论 -
学习笔记 | 虚拟内存
原创 2020-07-29 22:30:44 · 153 阅读 · 0 评论 -
学习笔记 | 信号
信号的生命周期?信号产生信号在进程中注册信号在进程中的注销执行信号处理函数信号的产生方式?(1)当用户按某些终端键时产生信号(2)硬件异常产生信号【内存非法访问】(3)软件异常产生信号【某一个条件达到时】(4)调用kill函数产生信号【接受和发送的所有者必须相同,或者发送的进程所有者必须为超级用户】(5)运行kill命令产生信号信号处理方式?(1)执行默认处理方式(2)忽略处理(3)执行用户自定义的函数...原创 2020-07-23 11:02:02 · 117 阅读 · 0 评论 -
学习笔记 | 并发(concurrency)和并行(parallelism)
并发(concurrency)和并行(parallelism)并发(concurrency):指宏观上看起来两个程序在同时运行,比如说在单核cpu上的多任务。但是从微观上看两个程序的指令是交织着运行的,你的指令之间穿插着我的指令,我的指令之间穿插着你的,在单个周期内只运行了一个指令。这种并发并不能提高计算机的性能,只能提高效率。并行(parallelism):指严格物理意义上的同时运行,比如多核cpu,两个程序分别运行在两个核上,两者之间互不影响,单个周期内每个程序都运行了自己的指令,也就是运行了两条原创 2020-06-28 12:40:10 · 747 阅读 · 0 评论 -
学习笔记 | 用户态到内核态的转化原理
用户态到内核态的转化原理1)用户态切换到内核态的3种方式1、系统调用这是用户进程主动要求切换到内核态的一种方式,用户进程通过系统调用申请操作系统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的ine 80h中断。2、异常当CPU在执行运行在用户态的程序时,发现了某些事件不可知的异常,这是会触发由当前运行进程切换到处理此。异常的内核相关程序中,也就到了内核态,比如缺页异常。3、外围设备的中断当外围设备完成用户请求的操作之后原创 2020-06-28 12:34:37 · 5319 阅读 · 0 评论 -
学习笔记 | 协程 概念理解
协程1、概念:协程,又称微线程,纤程,英文名Coroutine。 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。例如:def A() : print '1' print '2' print '3' def B() : print 'x' print 'y' print 'z'由协程运行结果可能是12x3yz。在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A。但协程的特点在于是原创 2020-06-28 12:32:34 · 172 阅读 · 0 评论 -
学习笔记 | 源码到可执行文件的过程
● 请你说一下源码到可执行文件的过程1)预编译主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下1、删除所有的#define,展开所有的宏定义。2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。3、处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。4、删除所有的注释,“//”和“/**/”。5、保留所有的#pragma 编译器指令,编译器需要用到他们,如:#pragma原创 2020-06-28 12:26:32 · 202 阅读 · 0 评论 -
学习笔记 | 内存溢出、内存泄漏
内存溢出和内存泄漏1、内存溢出指程序申请内存时,没有足够的内存供申请者使用。内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误内存溢出原因:内存中加载的数据量过于庞大,如一次从数据库取出过多数据集合类中有对对象的引用,使用完后未清空,使得不能回收代码中存在死循环或循环产生过多重复的对象实体使用的第三方软件中的BUG启动参数内存值设定的过小2、内存泄漏内存泄漏是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存原创 2020-06-28 12:16:02 · 238 阅读 · 0 评论 -
学习笔记 | 操作系统中的缺页中断
操作系统中的缺页中断malloc()和mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常。缺页中断:在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存是,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:1、保护CPU现场原创 2020-06-28 12:07:27 · 1928 阅读 · 0 评论 -
学习笔记 | Linux虚拟地址空间
请你说一说Linux虚拟地址空间为了防止不同进程同一时刻在物理内存中运行而对物理内存的争夺和践踏,采用了虚拟内存。虚拟内存技术使得不同进程在运行过程中,它所看到的是自己独自占有了当前系统的4G内存。所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上。 事实上,在每个进程创建加载时,内核只是为进程“创建”了虚拟内存的布局,具体就是初始化进程控制表中内存相关的链表,实际上并不立即就把虚拟内存对应位置的程序数据和代码(比如.text .data段)拷贝到物理内存中,只是建立原创 2020-06-28 12:04:11 · 189 阅读 · 0 评论 -
学习笔记 | 信号量机制、实现进程互斥、同步
01 信号量机制原创 2020-06-26 11:01:56 · 312 阅读 · 0 评论 -
笔记总结 | 线程、进程的概念和区别、进程间通信、线程间通信
请你说一下进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的。 01 基本概念:进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;一个程序加载到内存后就变为进程。进程 = 程序 + 执行。线程可以理解为进程中执行的一段程序片段。线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状.原创 2020-06-25 17:50:08 · 942 阅读 · 0 评论 -
学习笔记 | 死锁 deadlocks
死锁 deadlocks死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。01 产生死锁的4个必要条件:资源互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不抢占条件:进程已获得的资源,在末使用完之前,不能强行剥夺。...原创 2020-04-18 14:27:11 · 355 阅读 · 0 评论 -
学习笔记 | 操作系统 | 进程通信
第6章 进程通信6.1 为什么要通信?父进程在创建子进程后,通常需要监督子进程的状态,以便于子进程没有完成给定的任务时,可以再创建一个子进程来继续。这就需要父子进程间通信。进程之间的交互称为进程间通信(Inter-Process Communication,IPC)。6.2 进程对白:管道、记名管道、套接字进程对白就是一个进程发出某种数据信息,另外一方接受数据信息,而这些数据信息通...原创 2020-04-02 14:56:04 · 259 阅读 · 0 评论 -
学习笔记 | 操作系统 | 进程调度
第5章 进程调度5.1 进程调度的定义从概念上看,有多个进程在同时执行,但在单个CPU下,实际上在任何时刻只能有一个进程处于执行状态。而其他进程则处于非执行状态。我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?进程的调度就是操作系统进程管理的一个重要组成部分。其任务是选择下一个要运行的进程。一般来说,程序使用CPU的模式有3种:一种是程序大部分时间在CPU上执行,...原创 2020-04-01 17:36:58 · 272 阅读 · 0 评论 -
学习笔记 | 操作系统 | 基本概念
第3章 操作系统基本概念操作系统是一种软件,它运行在硬件上,又为更高层的应用软件提供服务。因此,对底层硬件的了解将帮助我们更好的掌握操作系统。3.1 计算机硬件基本知识典型的5级存储结构中断的基本原理是:设备在完成自己的任务后向CPU发出中断,CPU判断优先级,然后确定是否响应。如果响应,则执行中断服务程序,并在中断服务程序执行完后继续执行原来的程序。中断是一个很复杂的...原创 2020-03-31 19:26:23 · 268 阅读 · 0 评论 -
面试笔记 | 操作系统 | 内存管理
内存管理01 垃圾回收的优点和原理是什么?并考虑两种回收机制。Java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效地防止内存泄露,有效地使用可以使用的内存。垃圾回收器通常作为一个...原创 2020-03-15 22:30:25 · 198 阅读 · 0 评论 -
面试笔记 | 操作系统 | 线程、多线程
线程01 请描述进程和线程的差别。进程是程序的一次执行。线程可以理解为进程中执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别。进程间是独立的,这表现在内存空间、上下文环境上;线程运行在进程空间内。一般来讲(不使用特殊技术),进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。同一进程中的...原创 2020-03-15 22:26:47 · 175 阅读 · 0 评论 -
学习笔记 | 操作系统 | 进程定义、进程组成、进程管理、进程控制
进程01 试解释操作系统原理中的作业、进程、线程、管程各自的定义。作业:用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合。它包括用户程序、所需要的数据及控制命令等。作业是由一系列有序的步骤组成的。进程:一个程序在一个数据集合上的一次运行过程。所以一个程序在不同数据集合上运行,乃至一个程序在同样数据集合上的多次运行都是不同的进程。线程:线程是进程中的一个实体,是被系统独立调度...原创 2020-03-15 22:12:55 · 336 阅读 · 0 评论 -
学习笔记 | 《操作系统》学习思维导图
原创 2020-01-21 12:37:51 · 499 阅读 · 0 评论