本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space)。
服务器端编程,经常需要构造高性能的网络应用,需要选用高性能的IO模型,这也是通关大公司面试必备的知识。
linux不是没有病毒,而是病毒少。病毒少的原因:1、Linux账号有限制,即使这个病毒成功地感染了这个用户拥有的一个程序,由于这个用户权限受限,它进一步传播的任务也会非常困难;2、Linux网络有限制,其网络程序构建地很保守,没有让病毒快速传播变的可能的高级宏工具;3、Linux的应用软件和系统软件几乎都是开源的,而病毒很难藏身于开源的代码中间。 Linux教学 本教程操作环境:linux7.3系统、Dell G3电脑。 linux不是没有病毒,而是病毒少。 那么为什么Linux系统下病毒这么少?很
https://www.cnblogs.com/poloyy/category/1806772.html
随着计算机技术的飞速发展,Linux操作系统作为开源领域的佼佼者,已经深入到了各个应用场景之中。在Linux系统中,内核与用户空间之间的交互是核心功能之一,而设备驱动则是实现这一交互的关键环节。然而,传统的设备驱动开发往往受限于内核空间的限制,无法充分发挥用户空间程序的灵活性和性能优势。为了解决这个问题,Linux内核引入了UIO(Userspace I/O)驱动模型。
glibc 提供的 ptmalloc 函数 , FreeBSD 提供的 jemalloc 函数 , Google 提供的 tcmalloc 函数 ,
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
之前一直对 Binder 理解不够透彻,仅仅知道一些皮毛,所以最近抽空深入理解一下,并在这里做个小结。
程序如果要被CPU执行,就得编译成CPU可以执行的指令,一大堆的程序就变成了一堆的指令。
下图是根据同步、异步、阻塞、非阻塞四个指标总结的Linux下四个象限的I/O通信模式。
前几期的分享,我们站在编码视角去聊 Java IO,旨在理解与编码,本次从 Linux 操作系统层面了解一下 IO 模型,这样方能做到知其然,知其所以然。
除了读取和写入设备外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制。比如弹出介质,改变波特率等等。这些操作通过ioctl方法支持,该方法实现了同名的系统调用。
从基础讲起,IO的原理和模型是隐藏在编程知识底下的,是开发人员必须掌握的基础原理,是基础的基础,更是通关大厂面试的必备知识。
IPC全名为inter-Process Communication,含义为进程间通信,是指两个进程之间进行数据交换的过程。在Android和Linux中都有各自的IPC机制,这里分别来介绍下。
很多的小伙伴,被java IO 模型,搞得有点儿晕,一会儿是4种模型,一会儿又变成了5种模型。
什么是零拷贝 维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。 零拷贝给我们带来的好处: 减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务 减少内存带宽的占用 通常零拷贝技术还能够减少用户空间和操作系统内核空间之间的上下文切换 Linux系统的“用户空间”和“内核空间” 从Linux系统上看,除了引导系统的BIN区,整个内存空间主要被分成两个部分:内核空间(Ke
多任务系统中, 内核负责管理各个任务, 或者说为每个任务分配CPU时间, 并且负责任务之间的通讯.
◆DPDK是什么 Intel® DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。 ◆DPDK技术介绍 一、主要特点 1、UIO(L
① 用户应用程序调用 : 开发者 在 " 用户空间 “ 的 应用程序 中调用 malloc 等函数 , 申请 动态分配 ” 堆内存 " ,
linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。 Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。从图中可以看出(这里无法表示图),每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1GB字节虚拟内核空间则为所有进程以及内核所共享。 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。 虽然内核空间占据了每个虚拟空间中的最高1GB字节,但映射到物理内存却总是从最低地址(0x00000000)开始。对内核空间来说,其地址映射是很简单的线性映射,0xC0000000就是物理地址与线性地址之间的位移量,在Linux代码中就叫做PAGE_OFFSET。 内核空间和用户空间之间如何进行通讯? 内核空间和用户空间一般通过系统调用进行通信。 如何判断一个驱动是用户模式驱动还是内核模式驱动? 判断的标准是什么? 用户空间模式的驱动一般通过系统调用来完成对硬件的访问,如通过系统调用将驱动的io空间映射到用户空间等。因此,主要的判断依据就是系统调用。 内核空间和用户空间上不同太多了,说不完,比如用户态的链表和内核链表不一样;用户态用printf,内核态用printk;用户态每个应用程序空间是虚拟的,相对独立的,内核态中却不是独立的,所以编程要非常小心。等等。 还有用户态和内核态程序通讯的方法很多,不单单是系统调用,实际上系统调用是个不好的选择,因为需要系统调用号,这个需要统一分配。 可以通过ioctl、sysfs、proc等来完成。
==本文为读书和博客学习笔记,记录将知识总结自己理解的方式。可能存在错误。文末会给出相关参考链接==
作者简介:许庆伟,Linux Kernel Security Researcher & Performance Develope 如今,云原生平台越来越多的使用了基于eBPF的安全探测技术。这项技术通过创建安全的Hook钩子探针来监测内部函数和获取重要数据,从而支持对应用程序的运行时做监测和分析。Tracee是用于Linux的运行时安全和取证的开源项目,它基于eBPF实现,所以在安全监测方面效果更加优化。 在本文中,我们将探索控制eBPF事件的方法,并研究一个使用BPF事件捕获rootkit的案例。Root
当今,可观测性领域正在经历一场颠覆性的转变,其中核心驱动力便是 “eBPF”(扩展伯克利数据包过滤器)技术。作为下一代改革先锋,eBPF 技术正在彻底改变我们对系统观测和监控的认知。在之前的文章中,我们已经详细介绍了 eBPF 技术及其对可观测性的影响。
本文探讨Linux中 主要的几种零拷贝技术 以及零拷贝技术 适用的场景 。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入:
Android 安全架构的理解不仅帮助我了解 Android 的工作原理,而且为我开启了如何构建移动操作系统和 Linux 的眼界。 本章从安全角度讲解 Android 架构的基础知识。 在第 1.1 节中,我们会描述 Android 的主要层级,而第 1.2 节给出了在此操作系统中实现的安全机制的高级概述。
过去,CPU的地址总线只有32位, 32的地址总线无论是从逻辑上还是从物理上都只能描述4G的地址空间(232=4Gbit),在物理上理论上最多拥有4G内存(除了IO地址空间,实际内存容量小于4G),逻辑空间也只能描述4G的线性地址空间。
虽然我们在区分Linux进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_struct,当然我也想说linux其实也没有线程的概念, 只是将那些与其他进程共享资源的进程称之为线程。
我们知道,linux系统中用户空间和内核空间是隔离的,用户空间程序不能随意的访问内核空间数据,只能通过中断或者异常的方式进入内核态,一般情况下,我们使用copy_to_user和copy_from_user等内核api来实现用户空间和内核空间的数据拷贝,但是像显存这样的设备如果也采用这样的方式就显的效率非常底下,因为用户经常需要在屏幕上进行绘制,要消除这种复制的操作就需要应用程序直接能够访问显存,但是显存被映射到内核空间,应用程序是没有访问权限的,如果显存也能同时映射到用户空间那就不需要拷贝操作了,于是字符设备中提供了mmap接口,可以将内核空间映射的那块物理内存再次映射到用户空间,这样用户空间就可以直接访问不需要任何拷贝操作,这就是我们今天要说的0拷贝技术。
arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips等。Linux内核目前已经支持30种左右的体系结构。在arch目录下,存放的是各个平台以及各个平台的芯片对Linux内核进程调度、内存管理、中断等的支持,以及每个具体的SoC和电路板的板级支持代码。
操作系统内核提供 read(系统调用),读文件描述符 一个client连接就是一个文件描述符fd socket为阻塞的,socket产生的文件描述符,如左边的fd8,当数据包没到的时候,上面左边read不能返回,阻塞着。 即有一个client连接,就需要开一个进程(或者线程),读这个连接,有数据就处理,没数据就阻塞着。
传统虚拟化技术与容器技术对比 1、传统的虚拟化技术 传统的虚拟化技术会在已有主机的基础上创建多个虚拟主机,然后在每个虚拟主机上安装独立的操作系统,并由虚拟主机的内核空间和用户空间来运行应用程序
本章介绍所有的关于模块和内核编程的关键概念,通过一个 hello world 模块来认识驱动加载的流程及相关细节。
前两篇漫谈中讲到,除ntdll.dll外,在启动一个新进程运行时,PE格式DLL映像的装入和动态连接是由ntdll.dll中的函数LdrInitializeThunk()作为APC函数执行而完成的。这就牵涉到了Windows的APC机制,APC是“异步过程调用(Asyncroneus Procedure Call)”的缩写。从大体上说,Windows的APC机制相当于Linux的Signal机制,实质上是一种对于应用软件(线程)的“软件中断”机制。但是读者将会看到,APC机制至少在形式上与软件中断机制还是有相当的区别,而称之为“异步过程调用”确实更为贴切。
这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM)。 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到。 目前,/proc/sys/vm目录下有下面这些节点:
V4L2英文全称是Video for Linux2,它是专门为视频设备设计的内核驱动。在做视频的开发中,一般我们操控V4L2的设备节点就可以直接对摄像头进行操作。通常V4L2在Linux的设备节点是**/dev/video0**。无论是MIPI摄像头还是UVC摄像头,它们底层默认操作的都是/dev/video0的节点。
最近接着介绍安卓系统安全知识,Android安全主要由系统框架实现,开发者构建设计,到用户授权三大方面组成。本系列将从安卓系统框架设计,到用户权限管理,到最后的应用安全签名等全面介绍,这个过程中,有转载,译文,当然关键的也有原创,有兴趣的可以继续关注。
在上一篇文章里我们介绍了k8s集群中flannel udp overlay网络的创建,这在里我们基于上一篇文章中的例子,来介绍在flannel udp overlay网络中pod到pod的通讯。
Linux 内核修复办法:内核页表隔离KPTl(kernel page table isolation)
希望本文有助于展示您的Redis实例可以解锁的潜力。EQ Alpha与此模块和KeyDB项目的目标之一是帮助驱动选项,以实现更大,更强大的实例,从而通过能够处理更多负载来最小化分片和群集的需求。该模块采用独立模块形式,非常有用,因为无论Redis基本代码的下一步版本和未来版本如何,它都可能提供性能提升。
随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络结构,无不体现出这种创新与融合。
BIO(Blocking IO) 又称同步阻塞IO,一个客户端由一个线程来进行处理
在Linux内核中,无论如何切换进程,内核地址空间转换到物理地址的关系是永远不变的,主要原因是内核地址空间在所有进程中是共享的。这种设计有几个关键点:
Linux系统是虚拟内存系统,虚拟内存并不是真正的物理内存,而是虚拟的连续内存地址空间。虚拟内存又分为内核空间和用户空间,内核空间是内核程序运行的地方,用户空间是用户进程代码运行的地方,只有内核才能直接访问物理内存并为用户空间映射物理内存(MMU)。内核会为每个进程分配独立的连续的虚拟内存空间,并且在需要的时候映射物理内存,为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系,这个页表就是存在于MMU中;用户进程访问内存的时候,通过页表把虚拟内存地址转换为物理内存地址进而访问数据;其实对于用户进程而言,虚拟内存就是内存一般的存在(当作内存看待就好)。这样的设计可以把用户程序和系统程序分开,互不影响;内核可以对所有的用户程序进行管理,比如限制内存滥用等
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范围最广的 K8S CNI 网络方案 Calico 已宣布支持 eBPF,而作为第一个实现了Kube-Proxy 所有功能的 K8S 网络方案——Cilium 也是基于 eBPF 技术。因此,只有了解其底层机制,才能有助于更好、更易地融入容器生态中。
日前,Linux组织宣布成立开源项目IO Visor,该项目主要针对Linux内核的输入/输出请求任务。这个项目听上去似乎很深奥,事实上该项目与网络有很大的相关性。IO Visor无需借助网络硬件就可
领取专属 10元无门槛券
手把手带您无忧上云