操作系统
文章平均质量分 68
五山口老法师
腾讯后台开发工程师
展开
-
操作系统:DMA
1、DMA由来DMA(Direct Memory Access,直接存储器访问)。在DMA出现之前,CPU与外设之间的数据传送方式有程序传送方式、中断传送方式。CPU是通过系统总线与其他部件连接并进行数据传输。1.1程序传送方式程序传送方式是指直接在程序控制下进行数据的输入/输出操作。分为无条件传送方式和查询(条件传送方式)两种。1.1.1无条件传送方式微机系统中的一些简单的外设...原创 2019-08-26 21:29:19 · 5293 阅读 · 0 评论 -
操作系统:几种页面置换算法
1)最优置换算法(OPT)(理想置换算法)最佳置换法(OPT):选择将来不再使用或在最远的将来才被访问的页调换出去(不便于实现) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10、100或者1000条指令后才会被访问,每个页面都可以用在该页面首次被...原创 2019-01-21 16:33:57 · 1437 阅读 · 0 评论 -
操作系统:连续分配、分页和分段三种存储分配机制的优缺点
连续,设计简单,直接寻址,效率高。缺点:内存利用效率最低,有内部碎片。分页,缓解内存压力,设计最复杂(粒度最小),无论数据有多少,都只能按照页面大小分配,造成浪费。分段,程序员在编程和使用上多方面的要求(方便、共享、保护、链接、内存动态增长),缺点,无法利用碎片,必须搬移内存,造成性能损失。一、分区存储管理 1、固定分区: 优点:易于实现、开销小 缺点:存在内部碎片(分区...原创 2019-01-21 12:06:45 · 8597 阅读 · 0 评论 -
操作系统:基本分段存储管理方式
虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。下图为一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。 分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。 分页和分段的主要区别a)、页是信息的物理单位...原创 2019-01-21 11:42:49 · 1873 阅读 · 0 评论 -
操作系统:基本分页存储管理方式
1、离散分配方式----连续分配方式(分区存储管理)要求把作业放在一个连续的存储区中,因而会形成许多“碎片”,固定分区会产生内部碎片,动态分区会产生外部碎片。虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但需为之付出很大开销。如果允许将一个进程直接分散的装入到许多不相邻接的分区中,则无需再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理...原创 2019-01-21 11:16:40 · 4757 阅读 · 0 评论 -
操作系统:内存连续分配方式采用的几种算法及各自优劣
连续分配方式(交换技术),是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。注意:此处的连续内存分配是将整个进程的数据整块加载到内存之中。1.单一连续分配(单任务处理)内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式无需进行内存保护。 这种方式的优点...原创 2019-01-21 10:13:21 · 5934 阅读 · 2 评论 -
全面总结:进程与线程
首先,进程和线程的区别:根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位在开销方面:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一进程内的多个线程共享代码和数据空间,但每个线程都有自己独立的运行栈和程序计数器(PC),且线程的创建、销毁以及线程之间切换的开销较小。线程之间的通信更方便,同一进程下的线程共享全局变量、静...原创 2018-08-26 13:41:45 · 268 阅读 · 0 评论 -
操作系统:进程调度算法
进程调度算法基本调度算法:1. 先来先服务FCFS:既可以作为作业调度算法也可以作为进程调度算法;按作业或者进程到达的先后顺序依次调度;因此对于长作业比较有利。算法优点:易于理解且实现简单,只需要一个队列(FIFO),且相当公平 算法缺点:比较有利于长进程,而不利于短进程,有利于CPU 繁忙的进程,而不利于I/O 繁忙的进程。2. 短作业优先SPF:作业调度算法,算法从就...原创 2019-01-19 00:06:44 · 1268 阅读 · 0 评论 -
操作系统:优先级反转
(1)什么是优先级反转简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了。那在什么情况下会生这种情况呢?假设三个任务准备执行,A,B,C,优先级依次是A>B>C;首先:C处于运行状态,获得CPU正在执行,同时占有了某种资源;其次:A进入就绪状态,因为优先级比C高,所以获得CPU,A转为运行状态;C进入就绪状态;第三:执行过程中需要使用资源,而这...原创 2019-01-13 20:39:05 · 1450 阅读 · 0 评论 -
操作系统:虚拟内存的定义及实现方式
传统存储管理方式的特征各种内存管理策略都是为了同时将多个进程保存在内存中以便允许多道程序设计。传统的内存管理策略它们都具有以下两个共同的特征:1) 一次性作业必须一次性全部装入内存后,方能开始运行。这会导致两种情况发生:· 当作业很大,不能全部被装入内存时,将使该作业无法运行;· 当大量作业要求运行时,由于内存不足以容纳所有作业,只能使少数作业先...原创 2019-01-21 17:22:12 · 1832 阅读 · 0 评论 -
操作系统:生产者与消费者问题
使用信号量实现生产者-消费者问题 问题描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。因为缓冲区属于临界资源,因此需要使用一个互斥量 mutex 来控制对缓冲区的互斥访问。为了同步生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full...原创 2019-01-21 17:47:49 · 3295 阅读 · 0 评论 -
操作系统:读写问题
读者-写者问题允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。一个整型变量 count 记录在对数据进行读操作的进程数量,一个互斥量 count_mutex 用于对 count 加锁,一个互斥量 data_mutex 用于对读写的数据加锁。typedef int semaphore;semaphore count_mutex = 1;semaphore...原创 2019-01-21 17:49:15 · 890 阅读 · 0 评论 -
统计操作系统的整个系统负载占用CPU的情况
最近做一个Java性能统计的问题,需要统计当前进程占用CPU的情况,最开始使用Java MxBean来获取OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean();double cpu = osMxBean.getSystemLoadAverage();但是这个方法得到的操作系统统计的整个系统负...原创 2019-05-25 19:01:00 · 865 阅读 · 0 评论 -
IO多路复用:select/poll/epoll
selectint select (int maxfds,fd_set * readfds,fd_set * writefds,fd_set * errorfds,struct timeval* timeout)返回值:有变化的描述符,返回值大于零,且为描述符个数;等于零,超时或者没有变化的描述符;-1出错。timeout参数1)null时,select将会一直阻塞,直到有监听的描...原创 2019-03-19 21:29:16 · 303 阅读 · 0 评论 -
内存对齐
首先要知道,CPU读取内存中的数据书按照块来读取的。而这个块的大小可以是2的n次方。设想一下,如果在一块内存中,首地址存放的是char类型,占一个字节,紧接着存放一个4字节的int类型。那么当CPU要以4字节的块大小读取这个int类型的值,那么需要先读取0~3字节,再读取4~7字节,然后剔除0、5、6、7字节位上的数据,从而拼成这个int类型数据,这样一来,就会使得CPU的利用率下降。解决...原创 2019-03-14 15:32:48 · 206 阅读 · 0 评论 -
CPU中的寄存器
在CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。这些寄存器用来暂存一个计算机字,其数目可以根据需要进行扩充。1.数据寄存器数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速...原创 2019-03-14 13:05:30 · 965 阅读 · 0 评论 -
操作系统:了解一下磁盘结构
磁盘结构盘面(Platter):一个磁盘有多个盘面; 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小; 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写); ...原创 2019-01-22 09:41:02 · 266 阅读 · 0 评论 -
操作系统:链接
编译系统以下是一个 hello.c 程序:#include <stdio.h>int main(){ printf("hello, world\n"); return 0;}在 Unix 系统上,由编译器把源文件转换为目标文件。gcc -o hello hello.c这个过程大致如下: 预处理阶段:处理以 # 开头的预处理命令...原创 2019-01-22 09:41:07 · 395 阅读 · 0 评论 -
操作系统:死锁问题
死锁发生的四个必要条件 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。 占有和等待:已经得到了某个资源的进程可以再请求新的资源。 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。处理方法主要有以下四种方法: 鸵鸟策略 ...原创 2019-01-21 21:33:15 · 576 阅读 · 0 评论 -
操作系统:哲学家进餐问题
哲学家进餐问题 五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。下面是一种错误的解法,考虑到如果所有哲学家同时拿起左手边的筷子,那么就无法拿起右手边的筷子,造成死锁。#define N 5void philosopher(int i) { wh...原创 2019-01-21 17:50:09 · 839 阅读 · 0 评论 -
操作系统:用户态和核心态的区别
1.操作系统需要两种CPU状态:内核态(Kernel Mode):运行操作系统程序用户态(User Mode):运行用户程序2.指令划分:特权指令:只能由操作系统使用、用户程序不能使用的指令。 举例:启动I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机非特权指令:用户程序可以使用的指令。 举例:控制转移 算数运算 取数指令 访管指令(...原创 2019-01-17 15:38:11 · 2871 阅读 · 0 评论 -
操作系统:进程间通信与线程间同步
进程线程通信方式之间的差异每个进程有自己的地址空间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。 同一进程中的线程因属同一地址空间,可直接通信。不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。线程也被称为轻量级的进程,同一进程的线程共享全局变量和内存,使得线程之间共享数据很容易也很方便,但会带来某些共享数据的互斥问题。许对...原创 2019-01-17 15:08:58 · 644 阅读 · 0 评论 -
操作系统:进程的三种状态
进程的三种状态1. 就绪状态:进程获得了除了CPU之外的所有的必要资源,只要获得CPU就可以立即执行,此时的进程处于就绪态。2. 运行状态:进程已经获得CPU,正在运行,在多处理其系统中,会有多个进程同时处于运行状态。3. 阻塞状态:处于执行状态的进程由于发生某些事件而暂时无法继续执行,放弃处理机而处于暂停状态,此时进程就处于阻塞(执行受到阻塞)状态。进程的三种状态之间...原创 2019-01-17 14:52:55 · 11245 阅读 · 0 评论 -
9.惊群现象
什么是惊群现象?举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。对于操作系统来说,多个进程/线程在等待同一资源时,也会产生类似的效果,其结果就是每当资源可用,所有的进程/线程都来竞争资源,造成的后果:1)系统对用户进程/线程...原创 2018-09-18 22:38:48 · 224 阅读 · 0 评论 -
8.程序什么时候应该使用线程,什么时候单线程效率高?
程序什么时候应该使用线程? 使用多线程编程可以给程序员带来很大的灵活性,同时也使原来需要复杂技巧才能解决的问题变得容易起来。不论什么时候只要能用单线程就不用多线程,只有在需要响应时间要求比较高的情况下用多线程。某操作允许并发而且该操作有可能阻塞时,用多线程。线程很有用,但当使用线程时,可能会在解决老问题的同时产生新问题。例如要开发一个字处理程序,并想让打印功能作为单独的线程自己执行。...原创 2018-09-18 22:32:27 · 4909 阅读 · 1 评论 -
7.wait和waitpid
wait和waitpid:当一个进程正常或者异常终止的时候,内核就会向其父进程发送SIGCHLD信号,用于父进程来接受子进程的终止状态。#include<sys/wait.h>pid_t wait(int * statloc);pid_t waitpid(pid_t pid ,int * statloc,int options);wait和waitpid的主要区别是:...原创 2018-09-18 22:17:28 · 465 阅读 · 0 评论 -
6.exit && _exit && _Exit
进程的终止有8种方式,5种正常终止和3中异常终止5种正常终止:1:从 main 执行return返回。2:调用 exit(int x), 程序返回码是x,调用各种中止处理程序,关闭或冲洗缓冲区。 3:调用 _exit(int) 或 _Exit(int),提供一种无须调用各种中止处理程序就能进行终止的方法。4:最后一个线程从其启动例程返回。5:最后一个线程调用pthread_exit...原创 2018-09-18 21:59:11 · 1060 阅读 · 0 评论 -
5.fork和vfork
fork和vfork函数都是用于创建子进程的系统函数。fork函数调用一次,返回两次。两次返回的返回值不同。1)返回值等于0时,处于子进程空间。理由:一个进程只会有一个父进程,所以子进程总是可以调用getppid()来获得父进程的进程ID(进程ID为0的进程为系统的内核交换进程,所以一个子进程的进程ID不可能为0)2)返回值为正值(也即子进程pid)时,处于父进程空间。理由:一...原创 2018-09-18 21:42:09 · 181 阅读 · 0 评论 -
1.深度好文:带缓冲I/O 和不带缓冲I/O的区别与联系
首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的)。每调用一次write或re...原创 2018-08-05 22:38:58 · 321 阅读 · 0 评论 -
操作系统
操作系统内存对齐原理:https://blog.csdn.net/tingyun_say/article/details/51443803操作系统主要掌握:进程与线程的生命周期,结构,各自特点、区别及联系进程间通信机制(管道,FIFO,消息队列,信号量,共享内存)线程同步与互斥(互斥锁,测试并加锁,读写锁,条件变量,POSIX信号量)内存管理(分区(固定,动态),虚...原创 2018-08-19 17:52:19 · 278 阅读 · 0 评论 -
10.线程池与连接池
线程池与连接池https://www.cnblogs.com/dcz2015/p/5263006.html原创 2018-09-18 22:43:53 · 208 阅读 · 0 评论 -
11.C程序内存空间分配
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段: 代码段(code segment/text segment)通常是指用来存放...原创 2018-09-19 09:19:04 · 266 阅读 · 0 评论 -
2.LRU算法实现 [C++]
LRU算法实现原理:最近最久未使用页面置换算法(LRU)当需要淘汰某一页时,选择在最近一段时间里最久没有被使用过的页淘汰。其基本原理为:如果某一个页面被访问了,它很可能还要被访问;相反,如果它长时间不被访问,再最近未来是不大可能被访问的。LRU采用页号栈的实现方法。最近访问的页放在栈顶,较早访问的页往栈底移动。总是先淘汰处于栈底的页。#include <iostream>...原创 2018-09-11 09:23:58 · 713 阅读 · 1 评论 -
操作系统:五大功能
计算机硬件包括:CPU、内存以及IO设备。操作系统有五大功能:1、处理机管理:主要控制和管理CPU的工作。(CPU管理) 单CPU下和多CPU下。2、存储管理:主要进行内存的分配和管理 (内存管理) 内存分配、地址映射、内存保护与共享、虚拟内存等。3、设备管理:主要管理基本的输入输出设备 (IO管理) 完成用户的 I/O 请求,方便用户使用各种设...原创 2019-01-17 14:47:44 · 33805 阅读 · 0 评论 -
操作系统:并发、共享、虚拟、异步
操作系统的四大特征:并发、共享、虚拟、异步。并发在一段时间内,运行多个程序,执行多个任务。从宏观上来说的。操作系统中引入进程的目的就是为了使程序能并发执行。共享资源共享,即系统中的资源可供多个并发执行的进程共同使用。由于资源的属性不同,多个进程对资源的共享方式也不同,可分为:互斥共享方式 和同时访问方式。互斥共享方式:一段时间内只允许一个进程访问该资源,如磁带机、打印机等,...原创 2019-01-17 14:42:15 · 3330 阅读 · 0 评论 -
操作系统:操作系统知识点总结
操作系统知识点总结1. 基础知识1.1 内核态和用户态多数计算机有两种运行模式,用户态和内核态。软件中最基础的部分是操作系统,它运行在内核态。在这个模式中,操作系统具有对所有硬件的完全访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态,在用户态下,只使用了机器指令中的一个子集。核心态和用户态各有优势:运行在核心态的程序可以访问更多资源,但可靠性、安全性要求高,维护管...原创 2019-01-17 14:24:41 · 617 阅读 · 0 评论 -
Windows下的bat文件的@echo off 作用?
我们常常会在一些批处理文件中看到@echo off这个命令,那他究竟有什么作用,要想知道这个命令,我们首先得知道echo这个命令的作用,这个命令叫做“回显”,就是把这条命令后的内容显示到控制台上,接下来我们来看一下@echo off命令的作用。我们来新建一个文件,文件就命名为test_echooff.bat,然后在文件中编写如下内容:@echo offecho 这是测试内容的第1行...原创 2018-12-21 22:48:25 · 146210 阅读 · 15 评论 -
Windows下打包maven项目,编写bat脚本,dos命令在后台运行与关闭
在IDEA终端mvn clean package 会在项目目录下创建一个target目录,打好包的jar包就在这个目录下。那么如何运行?首先编写bat文件,如下编写 eureka_run.bat @echo offstart javaw -jar G:\workspace\eureka\target\eureka-0.0.1-SNAPSHOT.jarexit...原创 2018-12-21 22:42:13 · 1234 阅读 · 0 评论 -
14.线程安全?线程不安全?可重入函数?不可重入函数?
线程安全问题基本定义线程安全:简单来说线程安全就是多个线程并发执行同一段代码时,不会出现不同的结果,我们就可以说该线程是安全的;线程不安全:如果多线程并发执行时会产生不同的结果,则该线程就是不安全的。线程安全产生的原因:大多是因为对全局变量和静态变量的操作。常见的线程不安全的函数:(1)不保护共享变量的函数(2)函数状态随着被调用,状态发生变化的函数(3)返回指向静...原创 2018-09-20 23:33:29 · 546 阅读 · 0 评论 -
13.常用Linux命令
1.cat:连接文件,并将文件打印到标准输出设备上。原创 2018-09-20 16:43:54 · 160 阅读 · 0 评论