![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
摸森堡
这个作者很懒,什么都没留下…
展开
-
/usr/bin/ld: cannot find -lXXX
这是程序编译时找链接库,没有找到-lXXX库所以报错。usr表示的是unix software source/bin 二进制可执行命令/usr/bin 众多的应用程序ld命令是二进制工具集GNU Binutils的一员,是GNU链接器,用于将目标文件与库链接为可执行程序或库文件。对于该问题,可通过locate-lXXX指令找到依赖文件实际地址,然后用软连接将实际文件与搜索路径链接起来。ln 的功能是为某一个文件在另外一个位置建立一个同步的链接这个命令最常用的参数是-s,.原创 2021-11-04 14:38:49 · 1367 阅读 · 0 评论 -
Linux学习笔记——系统管理
1.软件包管理:centos : yum yum install vim ubuntu: apt2.网络管理:ping(网络连通性),talnet(端口,域名/ip信息),netstat(网络相关信息),ipconfig(网卡信息)3.进程管理:ps命令,top命令,杀死进程kill <pid> 默认15强制杀死 kill -9 <pid>4.磁盘管理:df 显示每个挂载磁盘可用空间 df -h(带单位)du 每个目录占用的空间大小...原创 2021-08-07 15:32:26 · 124 阅读 · 0 评论 -
Linux学习笔记——一些基本操作
1.帮助命令:man2.用户及用户组,密码管理命令:useradd userdel (都需要在root下进行) passwd(可在当前用户下修改密码,也可在root下修改密码)3.文件和目录的权限管理:chmod-change mod(root拥有最高权限)权限划分:-rwxrwxrwx 前三位:拥有人,中间三位:归属组,最后三位:其他人数字权限:r-4,w-2,x=1(可执行)修改权限:chmod 750 filename递归修改(即修改该文件目录下所有文件目录权限):chmod.原创 2021-08-07 15:16:16 · 76 阅读 · 0 评论 -
linux学习笔记——磁盘管理、文件管理和文件压缩
一、磁盘管理1.pwd- Print Working Directory 查看当前工作目录2.ls-list files 展示目录文件3.cd-changeDirectory 切换工作目录 cd ../回到上一级目录4.mkdir/rmdir-makeDirectory/removeDirectory 创建/删除目录二、文件管理1.cp-copy files 文件拷贝2.mv-move 文件移动3.rm-remove 文件删除4.cat-concatenate 文件...原创 2021-08-07 14:44:13 · 134 阅读 · 0 评论 -
利用共用体来判断大小端
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。1 在c中,联合体(共用体)的数据成员都是从低地址开始存放。2 若是小端模式,由低地址到高地址c.a存放为0x01 00 00 00,c.原创 2020-09-01 21:23:14 · 486 阅读 · 0 评论 -
堆和栈的区别
1.申请方式:栈由系统自动分配和管理,堆由程序员手动分配和管理。2.效率:栈由系统分配,速度快,不会有内存碎片。堆由程序员分配,速度较慢,可能由于操作不当产生内存碎片。3.扩展方向栈从高地址向低地址进行扩展,堆由低地址向高地址进行扩展。4.程序局部变量是使用的栈空间,new/malloc动态申请的内存是堆空间,函数调用时会进行形参和返回值的压栈出栈,也是用的栈空间。栈的效率高的原因:栈是操作系统提供的数据结构,计算机底层对栈提供了一系列支持:分配专门的寄存器存储栈的地址,压栈和入栈有专门的指原创 2020-08-18 16:48:25 · 271 阅读 · 0 评论 -
epoll的实现
Linux epoll机制是通过红黑树和双向链表实现的。 首先通过epoll_create()系统调用在内核中创建一个eventpoll类型的句柄,其中包括红黑树根节点和双向链表头节点。然后通过epoll_ctl()系统调用,向epoll对象的红黑树结构中添加、删除、修改感兴趣的事件,返回0标识成功,返回-1表示失败。最后通过epoll_wait()系统调用判断双向链表是否为空,如果为空则阻塞。当文件描述符状态改变,fd上的回调函数被调用,该函数将fd加入到双向链表中,此时epoll_wait函数被唤醒,返原创 2020-08-18 16:36:06 · 296 阅读 · 0 评论 -
原子操作
在多进程(线程)的操作系统中不能被其它进程(线程)打断的操作就叫原子操作,文件的原子操作是指操作文件时的不能被打断的操作。原子操作是不可分割的,在执行过程中不会被任何其它任务或事件中断。 linux内核提供了一系列函数来实现内核中的原子操作,这些函数又分为两类,分别针对位和整型变量进行原子操作。它们的共同点是在任何情况下操作都是原子的,内核代码可以安全地调用它们而不被打断。位和整型变量原子操作都依赖底层CPU的原子操作实现,因此所有这些函数都与CPU的架构密切相关。 死锁:假设有一个或多个内核任.原创 2020-08-01 08:25:56 · 482 阅读 · 0 评论 -
fork和vfork
fork的基础知识fork:创建一个和当前进程映像一样的进程可以通过fork( )系统调用:#include <sys/types.h>#include <unistd.h>pid_t fork(void);成功调用fork( )会创建一个新的进程,它几乎与调用fork( )的进程一模一样,这两个进程都会继续运行。在子进程中,成功的fork( )调用会返回0。在父进程中fork( )返回子进程的pid。如果出现错误,fork( )返回一个负值。最常见的fork( )用法是原创 2020-07-31 16:33:29 · 97 阅读 · 0 评论 -
协程
协程,又称微线程,纤程,英文名Coroutine。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。例如:def A() :print ‘1’print ‘2’print ‘3’def B() :print ‘x’print ‘y’print ‘z’由协程运行结果可能是12x3yz。在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A。但协程的特点在于是一个线程执行。2)协程和线程区别那和多线程比,协原创 2020-07-31 16:31:18 · 91 阅读 · 0 评论 -
线程切换需要保存哪些上下文
线程在切换的过程中需要保存当前线程Id、线程状态、堆栈、寄存器状态等信息。其中寄存器主要包括SP PC EAX等寄存器,其主要功能如下:SP:堆栈指针,指向当前栈的栈顶地址PC:程序计数器,存储下一条将要执行的指令EAX:累加寄存器,用于加法乘法的缺省寄存器...原创 2020-07-31 16:23:40 · 3488 阅读 · 0 评论 -
软链接和硬链接
为了解决文件共享问题,Linux引入了软链接和硬链接。除了为Linux解决文件共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若1个inode号对应多个文件名,则为硬链接,即硬链接就是同一个文件使用了不同的别名,使用ln创建。若文件用户数据块中存放的内容是另一个文件的路径名指向,则该文件是软连接。软连接是一个普通文件,有自己独立的inode,但是其数据块内容比较特殊。...原创 2020-07-31 16:19:49 · 71 阅读 · 0 评论 -
内存溢出
1、内存溢出指程序申请内存时,没有足够的内存供申请者使用。内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误内存溢出原因:内存中加载的数据量过于庞大,如一次从数据库取出过多数据集合类中有对对象的引用,使用完后未清空,使得不能回收代码中存在死循环或循环产生过多重复的对象实体使用的第三方软件中的BUG启动参数内存值设定的过小...原创 2020-07-31 16:18:47 · 74 阅读 · 0 评论 -
内存泄露
内存泄漏是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的分类:1、堆内存泄漏 (Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak原创 2020-07-31 16:18:19 · 87 阅读 · 0 评论 -
死锁产生的必要条件
1.互斥条件:一个资源每次只能被一个进程使用。2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3.不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。...原创 2020-07-31 16:16:40 · 133 阅读 · 0 评论 -
Linux的4种锁机制
互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒读写锁:rwlock,分为读锁和写锁。处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。 注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)。适用于读取数据的频率远远大于写数据的频率的场合。原创 2020-07-31 16:15:44 · 516 阅读 · 0 评论 -
Linux常用指令
file 辨识文件类型 -f 指定文件名、-v 显示版本信息find 在指定目录下查找文件 -type 指定文件类型、-name 指定文件名which 查找文件 -w 指定输出宽度、-V 显示版本信息whereis 查找文件 只能查找二进制文件、源代码和 man 手册,一般文件的定位需要用 locateread 从标准输入读取数值 -n 指定输入长度、-p 指定提示信息ftp 文件传输 -v 显示执行过程、-n 不使用自动登录cd 切换当前工作目录 ~ 根目录、. 当前目录,… 上层目录。te原创 2020-07-31 15:41:01 · 63 阅读 · 0 评论 -
从源码到可执行文件的过程
1.预处理预处理过程主要是处理那些源文件和头文件中以#开头的命令,预处理的规则一般如下:1.对所有的宏定义进行替换2.处理所有条件编译命令3.处理#include命令,将被包含文件的内容插入到该命令所在的位置4.删除所有的注释//和/* … */5.添加行号和文件名标识,便于在调试和出错时给出具体的代码位置6.保留所有的#pragma命令,因为编译器需要使用它们2.编译编译就是把预处理完的文件进行一些列的词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。3.汇编汇编的过程就原创 2020-07-20 17:23:30 · 173 阅读 · 0 评论 -
信号量实现同步和互斥操作
信号量实现同步:1.设同步信号量s=0;2.在前操作后加V操作3.在后操作前加P操作同步就是实现两个进程一前一后执行,当先执行P操作,由于没有资源,会执行block原语,进程暂时挂起,在执行V操作后,执行wakeup原语,唤醒后操作,继续执行。信号量实现互斥:1.设同步信号量s=1;2.两个进程都有P,V操作一个进程执行P操作,互斥信号量S=0,则另一个进程的P操作无法进行,直到第一个进程执行V操作释放资源。...原创 2020-07-15 20:49:47 · 991 阅读 · 0 评论 -
进程间的通信
进程间的通信一般有三种方式:共享内存、管道和消息传递1.共享内存每个进程是相互独立的,其内存空间也是互相不能访问的。操作系统会额外分配一块内存,两个进程可以互斥的访问共享空间。2.管道管道是操作系统开辟的一块固定大小的缓冲区,大小与页表大小相同,linux下大小为4k。管道通信是半双工通信,实现全双工要建两个管道。各进程互斥访问。管道没写满不能读,没读完不能写,写满时不能再写(wirte会阻塞),读满时不能再读(read会阻塞)。3.消息传递系统提供接收和发送原语。直接消息传递:发送方的消息到原创 2020-06-29 20:42:50 · 537 阅读 · 0 评论 -
大端和小端
什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16.转载 2020-06-28 21:07:08 · 227 阅读 · 0 评论 -
操作系统常见问题
转载:https://blog.csdn.net/zhtych8/article/details/105257621/转载 2020-06-23 14:51:01 · 124 阅读 · 0 评论 -
磁盘调度算法
转载:https://blog.csdn.net/xd_hebuters/article/details/79046170引言:在多道程序设计的计算机系统中,各个进程可能会不断对磁盘提出读/写请求。有时候进程发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,合理进行磁盘调度。本文将回顾影响磁盘读写时间的三个因素,并介绍几种常见的调度算法(FCFS、STF、SSF、 ES、ESLA、OWES)。文件系统笔记四、磁盘调度算法一、影响磁盘读写时间的主要因素二、磁盘调度算法2转载 2020-06-23 10:56:25 · 1200 阅读 · 0 评论 -
虚拟内存采用不同淘汰算法产生的缺页
有一个虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,当执行如下访问页号序列后1,2,3,4,5, 1,2,5,1,2,3,4,5,会发生多少缺页?注意:缺页定义为所有内存块最初都是空的,所以第一次用到的页面都产生一次缺页。内存块数是3时:FIFO,发生缺页时的调入顺序即为淘汰顺序1、访问1,缺页,调入1,内存中为 1, ,;2、访问2,缺页,调入2,内存中为 1,2,;3、 访问3,缺页,调入3,内存中为 1,2,3;4、 访问4,缺页,调入4,原创 2020-06-22 15:36:59 · 509 阅读 · 0 评论 -
虚拟内存置换
比较常用的内存置换算法有:FIFO、 LRU 、LFU、LRU-K,2Q1.FIFO(先进先出淘汰算法)最近刚访问的,将来访问的可能性比较大,通过队来实现。2. LRU(最不经常访问淘汰算法)首先淘汰最长时间未被访问的页面,新访问的放在栈底,每次淘汰栈顶3. LFU(最近最少使用淘汰算法)首先淘汰访问次数最少的页面,每个页面有一个引用计数,按引用计数放入队中,每次淘汰队尾。(如果引用计数相同,按时间来排)FIFO无法体现冷热信息,LRU、 LFU缓存颠倒...原创 2020-06-03 18:09:06 · 372 阅读 · 0 评论 -
进程和线程
进程是系统对应用程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发。线程是进程的子任务,是cpu进行调度和分配的进本单位,实现进程内部的并发,线程是操作系统可识别的最小执行和调度单位,每个线程都独自占用一个虚拟处理器:独立的寄存器组,指令计数器和处理器状态。每个线程完成独立的任务,但是共享同一片内存空间,打开的文件队列和其他内核资源。区别:1.一个线程只能属于一个进程,但一个进程可以拥有多个线程,至少有一个线程,线程依赖于进程存在。2.进程在运行过程中拥有独立的内存单元,而多个线程原创 2020-06-03 17:06:09 · 2948 阅读 · 0 评论 -
操作系统内存分配
内存原创 2020-04-26 08:21:29 · 445 阅读 · 0 评论