
操作系统
文章平均质量分 66
操作系统相关知识整理
好吃还得是柚子
首先,少年,答应了别人的事就一定要做到
展开
-
零拷贝的概念详解
传统IO 在开始谈零拷贝之前,首先要对传统的IO方式有一个概念。 基于传统的IO方式,底层实际上通过调用read()和write()来实现。 通过read()把数据从硬盘读取到内核缓冲区,再复制到用户缓冲区;然后再通过write()写入到socket缓冲区,最后写入网卡设备。 整个过程发生了4次用户态和内核态的上下文切换和4次拷贝,具体流程如下: 用户进程通过read()方法向操作系统发起调用,此时上下文从用户态转向内核态 DMA控制器把数据从硬盘中拷贝到读缓冲区 CPU把读缓冲区数据拷贝到应用缓冲区,转载 2021-03-21 11:25:37 · 1162 阅读 · 0 评论 -
操作系统中的结构体对齐、字节对齐
1、原因 平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛岀硬件异常。 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。 2、规则 数据成员对齐规则: 结构(stru或联合 union的数据成员,第一个数据成员放在 offset0的地方,以后每个数据成员的对齐按照# pragma pack指定的数值和这个数据成员自身长原创 2021-02-24 09:11:32 · 377 阅读 · 0 评论 -
一文掌握进程、线程和协程的关系
转载链接地址(收藏300+) 进程、线程和协程之间的区别和联系:https://blog.youkuaiyun.com/daaikuaichuan/article/details/82951084转载 2021-01-31 09:15:04 · 354 阅读 · 0 评论 -
进程间通信(IPC)总结
IPC机制总结 管道:使用简单 FIFO:非血缘关系间 信号:开销小 共享内存:非血缘关系间 本地套接字:稳定性好 管道 FIFO 共享存储映射 本地套接字(domain) socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、原创 2021-01-30 08:19:37 · 697 阅读 · 0 评论 -
进程间通信(IPC)方法之管道
进程间通信概念 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。 在进程间完成数据传递需要借助操作系统提供特殊的方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。随着计算机原创 2021-01-30 08:02:33 · 709 阅读 · 0 评论 -
守护进程的概念及其创建
什么是守护进程? 守护进程是后台运行的、系统启动是就存在的、不予任何终端关联的,用于处理一些系统级别任务的特殊进程。通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,一般采用以d结尾的名字。Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。 实现思路: 实现一个守护进程,其实就是将普通进程按照上述特性改造为守护进程的过程。 需要注意的一点是,不同版本的 Un转载 2021-01-29 08:56:15 · 509 阅读 · 0 评论 -
父进程与子进程、线程与进程之间的关系
父进程、子进程的关系 资源:子进程得到的是除了代码段是与父进程共享的,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,所以二者并不共享地址空间。两个是单独的进程,进程具有私有地址空间的属性。子进程在继承了父进程之后就父进程没有什么关联了,子进程单独运行。通过MMU实现写时复制技术。 文件描述符:继承父进程的文件描述符时,相当于调用了dup函数,父子进程共享文件表项,即共同操作同一个文件,一个进程修改了文件,另一个进程也知道此文件被修改了。 线程、进程的关系 通常意义上原创 2021-01-29 08:08:00 · 3480 阅读 · 0 评论 -
线程概念详细总结
什么是线程 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。 独居(进程);合租(线程)。 Linux下:线程是最小的执行单位;进程是最小分配资源单位,可看成是只有一个线程的进程。 Linux内核线程实现原理 类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。 轻量级原创 2021-01-29 08:01:12 · 750 阅读 · 0 评论 -
进程相关概念详细总结
程序与进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…) 进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程) 程序 → 剧本(纸) 进程 → 戏(舞台、演员、灯光、道具…) 同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响) 如:同时开多个终端。各自都有一个bash但彼此ID不同。如图所示打开的三个终端彼此对应的进程ID各不相同。 并发、并原创 2021-01-28 14:43:26 · 629 阅读 · 0 评论 -
内存碎片的概念
碎片 在操作系统的内存管理中,造成堆利用率很低的主要原因是一种称为碎片(fragmentation)的现象,当虽然有未使用的内存但不能来满足分配请求时,就发生这种现象。碎片的形式有两种:内部碎片和外部碎片。 内部碎片 内部碎片是在一一个已分配块比有效载荷大时发生的。很多原因都可能造成这个问题。例如,一个分配器的实现可能对已分配块强加一-个最小的大小值,而这个大小要比某个请求的有效载荷大。或者,就如我们在图934b中看到的,分配器可能增加块大小以满足对齐约束条件。 内部碎片的量化是简单明 了的。它就是已分配块原创 2021-01-26 20:44:49 · 1328 阅读 · 1 评论