随笔分类 - 操作系统
摘要:信号(Signal)是一种软件中断,比如Ctrl+C的退出命令实质上就是使用了信号。信号在Linux操作系统中提供了一种处理异步事件的方法,可以很好地在多个进程之间进行同步和简单的数据交互。 kill -9 不可捕获 Linux的信号机制信号机制是一种使用信号来进行进程之间的传递消息的方法,其中信号
阅读全文
摘要:线程切换的损耗在us级 linux中的进程与线程 首先明确进程与进程的基本概念: 进程是资源分配的基本单位 线程是CPU调度的基本单位 一个进程下可能有多个线程 线程共享进程的资源 基本原理 linux用户态的进程、线程基本满足上述概念,但内核态不区分进程和线程。可以认为,内核中统一执行的是进程,但
阅读全文
摘要:多用户——多用户操作系统允许多个不同用户同时使用计算机的资源。操作系统必须确保均衡地满足各个用户的要求,他们使用的各个程序都具有足够且独立的资源,从而使一个用户的问题不会影响到整个用户群。Unix、VMS和大型机操作系统(如 MVS)是多用户操作系统的范例。区分多用户操作系统和支持网络的单用户操作系
阅读全文
摘要:转自:https://blog.csdn.net/okiwilldoit/article/details/82755526 bthread是brpc使用的M:N线程库,目的是在提高程序的并发度的同时,降低编码难度,并在核数日益增多的CPU上提供更好的scalability和cache localit
阅读全文
摘要:一、编译及加载 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程 程序运行时
阅读全文
摘要:基础 操作系统通过一个叫做“系统调用”的标准机制来对上层提供服务,他们提供了一系列标准的API来让上层应用程序获取底层的硬件和服务,比如文件系统。当一个进程想要进行一个系统调用的时候,它会把该系统调用所需要用到的参数放到寄存器里,然后执行软中断指令0x80. 这个软中断就像是一个门,通过它就能进入内
阅读全文
摘要:查看动态库的加载路径 patchelf --print-rpath so $ORIGIN:$ORIGIN/lib 在 低版本 libc 库运行高版本 libc 库编译的程序 这篇博客中我描述了使用 patchelf 来修改动态库链接器的方法,在本篇文章中,我完整的列举下 patchelf 的功能,并
阅读全文
摘要:动态库加载器可以通过运行一些动态链接的程序来间接调用(在这种情况中,不需要向动态库加载器指定任何命令行参数,对于 ELF 文件,动态库链接器的路径存储在将被执行的程序的 .interp section 中)或直接通过 /lib/ld-linux-so.* xx 来调用。 ld.so 与 ld-lin
阅读全文
摘要:一. 引子 在多线程环境中,经常会有一些计数操作,用来统计线上服务的一些qps、平均延时、error等。为了完成这些统计,可以实现一个多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值。在实现这个计数器类库时,可以利用thread local存储来避免cache bouncing,从而提高
阅读全文
摘要:1、为什么需要Service Mesh 微服务治理主要有远程Proxy方式、智能客户端方式以及本地Proxy 3种主要承载方式 1)远程Proxy方式 客户端和服务端通信,客户端和服务端都需要有不少服务治理相关的考虑,比如客户端访问服务端时需要考虑服务发现、流量路由、负载均衡、调用熔断、请求降级、m
阅读全文
摘要:一、命令 [root@localhost ~]# free -m total used free shared buffers cached Mem: 7869 7651 218 1 191 5081 -/+ buffers/cache: 2378 5490 Swap: 478 139 339 二、
阅读全文
摘要:系统如何将一个信号通知到进程?参考linux内核中异步通知机制–信号处理机制 小结内核给进程发送信号,是在进程所在的进程表项的信号域设置对应的信号的位。 进程检查信号的时机是:进程即将从内核态返回用户态时。如果进程睡眠了,要看睡眠能不能被中断,如果能被中断则唤醒。 进程有一个链表的数据结果,维护一个
阅读全文
摘要:前言 乐观锁和悲观锁问题,是出现频率比较高的面试题。本文将由浅入深,逐步介绍它们的基本概念、实现方式(含实例)、适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官。 目录 一、基本概念 二、实现方式(含实例) 1、CAS(Compare And Swap) 2、版本号机制 三、优缺点和适用
阅读全文
摘要:Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式;二是Append-only file(缩写aof)的方式;三是虚拟内存方式;四是diskstore方式。下面分别介
阅读全文
摘要:1. 概述 为了保证数据的一致性,在多线程编程中我们会用到锁,使得在某一时间点,只有一个线程进入临界区代码。虽然不同的语言可能会提供不同的锁接口,但是底层调用的都是操作系统的提供的锁,不同的高级语言只是在操作系统的锁机制基础上进行了些封装而已,要真正理解锁,还是得看操作系统是怎么实现锁的。 2. 锁
阅读全文
摘要:作者:匿名用户链接:https://www.zhihu.com/question/50796850/answer/522734117来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 要理解分段和分页,那么得理解为什么会出现分段和分页的技术 首先,这两个技术都是为了利用和
阅读全文
摘要:第一层理解 1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内
阅读全文
摘要:内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。 用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。 为什么要有用户态和内核态? 由于需要限制不同的程序之间的访问能力, 防止他们获
阅读全文
摘要:今天听了公司内部的讲座,对于之前关于IO一些模模糊糊的地方有了一些新的感想以及体会,故此总结一下。 一、IO模型:Reactor和Proactor Reactor框架工作模式为:用户注册事件,而后Reactor框架监听该事件,当数据到达后,通知用户,而后用户自己完成事件处理。因此用户只需向React
阅读全文
摘要:概念 竞争条件 多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时许,称为竞争条件。 忙等待的互斥 几种实现互斥的方案: 屏蔽中断 1在单处理器系统中,最简单的方法是使每个进程在刚刚进入临界区后立即屏蔽所有中断,包括时钟中断。CPU 只有在发生中断的时候才会进行进程切换,这样在中断被屏蔽后
阅读全文