首页
学习
活动
专区
工具
TVP
发布

Linux虚拟地址空间布局

在多任务操作系统中,每个进程都运行在属于自己内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB内存地址块。...虚拟地址通过页表(Page Table)映射到物理内存,页表由操作系统维护并被处理器引用。内核空间在页表中拥有较高特权级,因此用户态程序试图访问这些页时会导致一个页错误(page fault)。...在Linux 2.6内核中,共享库起始地址被往上移动至更靠近栈区位置。...8 保留区 位于虚拟地址空间最低部分,未赋予物理地址。任何对它引用都是非法,用于捕捉使用空指针和小整型值指针引用内存异常情况。...在32位X86架构Linux系统中,用户进程可执行程序一般从虚拟地址空间0x08048000开始加载。该加载地址由ELF文件头决定,可通过自定义链接器脚本覆盖链接器默认配置,进而修改加载地址。

3.2K40

Linux 串口基本用法

查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用调试工具有: minicom...cutecom Linux系统可视化串口应用软件,使用上与Windows系统串口调试工具。 picocom 效果上类似 minicom 精简版,设置比较简单,还可以有背景颜色。...PC上串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写权限 $ sudo chmod 777 /dev...查看linux所有用户 使用 /etc/passwd 文件 使用任何一个像 cat、more、less 等文件操作命令来打印 Linux 系统上创建用户列表。.../etc/passwd 是一个文本文件,其中包含了登录 Linux 系统所必需每个用户信息。

9.5K41
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )

文章目录 一、虚拟地址空间布局架构 二、用户虚拟地址空间划分 一、虚拟地址空间布局架构 ---- 在 64 位 Linux 操作系统中 , " ARM64 架构 " 并 不支持 64 位虚拟地址..., 最大只支持 48 位虚拟地址 , 64 位地址太大 , 并不需要那么大内存空间 ; " ARM64 架构 " 中 , Linux 系统 " 内核虚拟地址 “ 与 ” 用户虚拟地址 "...是等同 ; 用户虚拟地址 : 0x 0000 0000 0000 0000 ~ 0x 0000 FFFF FFFF FFFF , 48 位有效地址 ; 内核虚拟地址 : 0x FFFF 0000...0000 0000 ~ 0x FFFF FFFF FFFF FFFF , 48 位有效地址 ; 二、用户虚拟地址空间划分 ---- Linux 操作系统 进程 " 用户虚拟空间 " 起始地址..., 选择 " 虚拟地址空间 " 地址位数 , TASK_SIZE 与 TASK_SIZE_64 宏 相关源码如下 : /* * PAGE_OFFSET - the virtual address

6.8K20

Linux 进程虚拟地址空间布局

文章目录 1.虚拟地址空间简介 2.虚拟地址空间布局 参考文献 1.虚拟地址空间简介 虚拟地址空间(Virtual Address Space)是每一个程序被加载运行起来后,操作系统为进程分配虚拟内存...每个进程所能访问最大虚拟地址空间由计算机硬件平台决定,具体地说是由 CPU 位数决定。...对于 Linux,4GB 虚拟地址空间默认分配状态如下: 2.虚拟地址空间布局 C/C++程序为编译链接后生成可执行二进制文件,由多个段组成,一般包含代码段、数据段和 BSS 段等。...可执行文件载入内存运行时,在 Linux 环境下虚拟地址空间由一般有代码段、初始化数据段、未初始化数据段、堆和栈构成,如果程序使用了内存映射文件(比如共享库、共享文件),那么包含映射段。...64bitsLinux默认栈大小为10MB,可通过命令ulimit -s临时修改。

4.9K50

Linux基础(串口编程)

虽然以太网接口和USB接口也是以一个串行流进行数据传送,但是串口连接通常特指那些与RS-232标准兼容硬件或者调制解调器接口。废话少讲,今天来解剖使用串口编程代码细节。...上面的代码是使用串口第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置为raw...数据模式,即关闭掉字符回显、关闭输入输出时特殊进度控制特殊字符,因为我们此时不需要使用串口来实现终端控制,因此这些功能都不需要: cfmakeraw(&serial); 第25-26行,很简单,设置输入输出波特率...最后,将以上所有参数一股脑设置到对应串口就行了: tcsetattr(fd,TCSANOW,&serial); 当然,上面的 fd 就是系统中某一个你想要设置成上面那样属性参数串口,比如就拿粤嵌

12.6K20

Linux 查看本机串口方法

最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1、查看串口是否可用    可以对串口发送数据比如对com1口,echo /dev/ttyS0 2、查看串口名称使用    ls...-l /dev/ttyS*   一般情况下串口名称全部在dev下面,如果你没有外插串口卡的话默认是dev下ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然; 3、...查看串口驱动    cat/proc/tty/drivers/serial 4、查看串口设备    dmesg | grep ttyS* 5、查一下板子上串口有没有设备    grep tty/proc.../dev下应该有一个USB串口:/dev/ttyUSB0. 当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用串行设备。...PC上串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口使用: 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0

20.7K20

Linux可执行文件与进程虚拟地址空间

作者简介: 本文由西邮陈莉君教授研一学生贺东升编辑,梁金荣、张孝家校对 建议结合之前linux内存寻址方式》看。...Linux可执行文件与进程虚拟地址空间 一个可执行文件被执行同时也伴随着一个新进程创建。...Linux会为这个进程创建一个新虚拟地址空间,然后会读取可执行文件文件头,建立虚拟地址空间与可执行文件映射关系,然后将CPU指令指针寄存器设置成可执行文件入口地址,然后CPU就会从这里取指令执行...Proc目录下进程虚拟地址空间布局 Linux在装载可执行文件时候,会将这些segment映射到进程地址空间中。映射时候,这里面的segment会对应一个VMA。...Linux将进程虚拟地址空间中一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程虚拟地址空间,通过命令 cat /proc/pid/maps ?

4.1K30

嵌入式Linux串口编程

简介 嵌入式Linux串口编程与Linux系统下编程没有什么区别,系统API都是一样。...嵌入式设备中串口编程是很常用,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。...RS232与RS485在使用上区别,RS232是全双工,只能对接一个设备串口设备。RS485是半双工总线协议,一般可以挂多个传感器设备,半双工意思是同时只能有一个设备向串口发数据。...用到API函数 函数 说明 open 打开设备,用于打开串口设备 fcntl 修改设备描述符属性参数 isatty 检测打开描述符是否指向一个终端 tcgetattr 用来获取串口终端参数 cfmakeraw...将终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理 tcflush 用于清空输入、输出缓冲区 tcsetattr 设置串口终端参数 read 读取数据 write 写数据 close 关闭串口设备

12.7K20

Linux虚拟地址空间 --- 虚拟地址、空间布局、内存描述符、写时拷贝、页表…

---- ---- 一、虚拟地址空间 1.虚拟地址引出(看不到物理地址,只能看看虚拟地址喽) 1 #include 2 #include 3...虚拟地址空间本质就是内核一种数据结构,叫做mm_struct结构体,这个结构体是描述虚拟地址空间最核心结构。 4.mm_struct内部结构(详谈OS画大饼) 1....[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ struct linux_binfmt *binfmt; cpumask_t cpu_vm_mask...所以操作系统为了保证进程独立性,通过虚拟地址空间,再到页表,让不同进程使用同一虚拟地址,能够映射到不同物理内存处。 3....编译器和进程一样也被画饼,所以CPU在读取加载到内存上程序时候,读取就是程序虚拟地址,背后通过操作系统在不断切换虚拟地址和物理地址,以便使得CPU读取地址始终是虚拟地址。 9.

1.3K20

Linux 内核 内存管理】虚拟地址空间布局架构 ⑤ ( Linux 内核中对 “ 虚拟地址空间 “ 描述 | task_struct 结构体源码 )

文章目录 一、Linux 内核中对 " 虚拟地址空间 " 描述 二、task_struct 结构体源码 一、Linux 内核中对 " 虚拟地址空间 " 描述 ---- 进程 " 虚拟地址空间 "...由 mm_struct 和 vm_area_struct 两个数据结构描述 ; mm_struct 是 “最高层次 " 上描述 ” 整个虚拟地址空间 “ 结构体 ; 该结构是对 ” 整个 “ ” 用户空间..." 进行描述 ; vm_area_struct 是 " 较高层次 " 上描述 " 虚拟地址空间 " 区间 ; 每个进程只有 1 个 mm_struct 结构体数据 , 用于描述 整个 "...虚拟地址空间 " ; 则 对应 " 进程描述符 task_struct " 中 , 有 1 个指针指向 mm_struct 结构体 ; task_struct -> mm_struct -> vm_area_struct...内核源码 linux-4.12\include\linux\sched.h#483 位置 ; task_struct 中 mm active_mm 是 描述 " 整个虚拟空间 " mm_struct

3.5K20

进程虚拟地址空间

Linux 系统中,采用了虚拟内存管理技术,事实上大多数现在操作系统都是如此!...在 Linux 系统中,每一个进程都在自己独立地址空间中运行,在 32 位系统中,每个进程逻辑地址空间均为 4GB,这 4GB 内存空间按照 3:1 比例进行分配,其中用户进程享有 3G 空间...虚拟地址会通过硬件 MMU(内存管理单元)映射到实际物理地址空间中,建立虚拟地址到物理地址映射关系后,对虚拟地址读写操作实际上就是对物理地址读写操作,MMU 会将物理地址“翻译”为对应物理地址...Linux 系统下,应用程序运行在一个虚拟地址空间中,所以程序中读写内存地址对应也是虚拟地址,并不是真正物理地址,譬如应用程序中读写 0x80800000 这个地址,实际上并不对应于硬件 0x80800000...针对以上一些问题,就引入了虚拟地址机制。程序访问存储器所使用逻辑地址就是虚拟地址,通过逻辑地址映射到真正物理内存上。

2.3K30

linux」物理地址,虚拟地址,内存管理,逻辑地址之间关系

虚拟地址虚拟地址是CPU保护模式下一个概念,保护模式是80286系列和之后x86兼容CPU操作模式,在CPU引导完操作系统内核后,操作系统内核会进入一种CPU保护模式,也叫虚拟内存管理,在这之后程序在运行时都处于虚拟内存当中...,虚拟内存里所有地址都是不直接,所以你有时候可以看到一个虚拟地址对应不同物理地址,比如A进程里call函数入口虚拟地址是0x001,而B也是,但是它俩对应物理地址却是不同,操作系统采用这种内存管理方法...,比如mov 0x4h8这个是虚拟地址,当我们要对这个虚拟地址里写数据时那么MMU会先判断CPU分页状态寄存器里标志状态是否被设定,如果被设定那么MMU就会捕获这个虚拟地址物理并在操作系统内核初始化好内存映射表里查询与之对应物理地址...,并将其转换成真正实际物理地址,然后在对这个实际物理地址给CPU,在由CPU去执行对应命令,相反CPU往内存里读数据时比如A进程要读取内存中某个虚拟地址数据,A进程里指令给虚拟地址,MMU...首先会检查CPU分页状态寄存器标志位是否被设置,如果被设置MMU会捕获这个虚拟地址并将其转换成相应物理地址然后提交给CPU,在由CPU到内存中去取数据!

2.9K00

linux」物理地址,虚拟地址,内存管理,逻辑地址之间关系2

GDT在内存中地址和大小存放在CPUgdtr控制寄存器中,而LDT则在ldtr寄存器中。 什么时候使用全局和局部呢?这是由段描述符中T1字段表示,=0,表示用GDT,=1表示用LDT。...局部表示进程自己,仅进程自己可以使用,全局则表示操作系统等所有进程都可以使用! 如果不使用段偏移表示地址的话则称为虚拟地址!...线性地址: 线性地址是逻辑地址到物理地址之间一个中间层变换,程序代码会产生逻辑地址,或者说是段中偏移地址,加上相应段基地址就生成了一个线性地址,逻辑地址是如何知道自己段基址?...1.虚拟地址是CPU保护模式下一个概念,保护模式是80286系列和之后x86兼容CPU操作模式,在进入虚拟模式之前CPU以及Bootloader,操作系统内核均运行在实模式下,直接对物理地址进行操作...7.内存中有一个叫MMU(内存管理单元)电子元件负责从操作系统已经初始化好内存映射表里查询与虚拟地址对应物理地址并转换, 8.逻辑地址由两部份组成,段标识符和段内偏移量。

1.8K00

鸿蒙系统开发教程_韦东山 2-1移植RTOS需要做

常见错误观点是把鸿蒙跟Linux放在一起来对比,这不对: Linux只是一个内核,普通人无法使用 还需要在Linux之上安装各类程序 比如Ubuntu等发行版,它们在Linux内核之上,还有桌面、各类办公软件...)设置:虚拟地址与物理地址 完善中断子系统 提供系统tick时钟 为串口驱动实现基于中断读取字符函数 实现存储设备驱动程序 在存储设备上烧录文件系统 3.1 串口相关 与Linux串口驱动相比...,鸿蒙串口驱动极大简化了。...对于输入:使用中断,我们只需要提供底层硬件相关代码。 要注意:使用虚拟地址。...示例如下 3.2.2 地址映射 使能MMU后,CPU发出地址被称为"虚拟地址",它不是直接发送给硬件,而是发给MMU MMU根据页表 进行权限判定 转换为物理地址,发给外设 运行app1时

99610

使用picocm来进行Linux串口调试

主要原因就是minicom没有彩色文字,看着难受,特别是调试ARM Linux时候233 安装 因为正常是在Debian系列Linux发行版上面使用(deepin或者ubuntu这些,解决方案比较完善...然后使得这个设备能被picocom工具访问使用 sudo chmod 777 /dev/ttyUSBx 请自行将ttyUSBx替换为当前使用串口设备 连接串口设备 下面是一般连接一个串口设备说使用命令...参数讲解 -b: 设置波特率参数 /dev/ttyUSBx:串口设备,请替换为当前使用串口设备 打开帮助提示页面 ?...+h打开,所以其他命令也是同理 发送接收文件 如果直接使用上面的连接串口设备命令直接去进行文件发送的话,你就会发现Ctrl a+s进行发送时候根本没办法确定使用哪种协议进行,很让人摸不着头脑..."rb -vv" -b 115200 /dev/ttyUSBx 同样,使用当前串口设备文件 退出picocom 直接就是按动Ctrl a+q就可以 尾声 picocom相较于minicom

8.9K60
领券