首页 > 系统相关 >可执行文件的装载与进程

可执行文件的装载与进程

时间:2022-12-18 16:11:23浏览次数:43  
标签:可执行文件 LDT 时重 装载 内存 页表 进程 段表

装载的两种方式:曾经使用的覆盖装入,现在使用的页映射,都是动态装入,

覆盖装入:将模块按照它们之间的依赖关系组织成树状结构。本质上还是想节约内存,将没有依赖的模块可以覆盖在同一块内存。

页映射:每一个进程立起来的时候分配的空间其实只是先建立一个映射关系,在虚拟地址中根据分区算法等“拿到自己的段”,建立页表,建立对应的页项,此时仍然没有拿到物理内存。等到执行到相应的代码时,发现该页没有影射到物理页,发生页错误,再从文件中读入相应内容到内存,这就真的拿到了内存。

 

每个进程都有自己的页表段表,进程的段表和页表肯定放在进程的“身份证”--PCB中。

进程的段表:每个进程的段表就是LDT表,LDT段表的基址可以放在特定的寄存器中。

进程的页表:每个进程都有自己的页表,页表的基址依然放在特定的积存器中。

 

程序分段:段号+偏移:CS+IP给出的是虚拟地址,在保护模式下,CS中放的就是段选择子而非物理地址。

分页的存在,是为了解决内存分区的效率问题。操作系统初始化的时候,会将内存打散成一页一页的。

操作系统的段表就是GDT表,每个进程的段表就是LDT表。

 

在没有分段的视角下:

编译时重定位:将内存地址提前写死。

载入时重定位:更灵活,但是换入换出后,失效

运行时重定位:base 放在pcb 中,换入换出,pcb 更新base。

 

标签:可执行文件,LDT,时重,装载,内存,页表,进程,段表
From: https://www.cnblogs.com/wuyun--wy/p/16989541.html

相关文章

  • Linux进程通信
    写在前面今天主要的任务就是知道什么是进程通信?进程通信是如何实现的?前面我们学习了基础IO,再往前看又学习进程的相关的概念,那么今天我们通过进程的通信来把他们用起来.......
  • cgroup限制进程cpu
    编写一个死循环脚本[root@workstation~]#catcircle.sh#!/bin/basha=1whiletruedo leta++done查看top使用cgroup进行资源控制[root@workstationcpu]#mk......
  • 操作系统-哈工大-李治军老师-【实验项目4-基于内核栈切换的进程切换】
    课程的实验地址:实验楼:https://www.lanqiao.cn/courses/115(一)实验相关的要求1.实验目的2.实验内容3.实验报告4.评分标准5.实验提示(二)前置知识点1.基......
  • 事务(进程 ID %1!)与另一个进程已被死锁在资源 {%2!} 上,且该事务已被选作死锁牺牲品。请
    --检测死锁--如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程?--这时我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句。SQLServe......
  • Linux获取进程处理器及内存占用等信息
    Linux获取进程处理器及内存占用等信息本文参考proc(5)2021年08月27日版。获取处理器(CPU)信息/proc/stat记录系统启动以来CPU在不同状态下消耗的时间之和,单位是用户时钟......
  • python协程和子进程混用编程尝试
    使用python编程,当程序是IO密集型,很多网友都推荐使用协程代替线程,因为python的多线程因为GIL的原因,并不能使用计算机CPU多核;而协程是微线程,性能更好,资源消耗更少,适合于多并......
  • 将Python程序打包成Linux可执行文件
    将Python程序打包成Linux可执行文件安装环境首先我们要安装pip,命令如下:sudoaptinstallpython3-pip使用的工具是pyinstaller,打开终端输入sudopipinstallpyin......
  • MySQL kill进程后出现killed
    一.问题描述拷贝一个大表的表数据的时候,等待时间太久,就在前台通过CTRL+C的方式停掉了   通过showprocesslist查找到对应的进程,然后进行kill,结果kill完了,依旧在进......
  • 进程间通信-socketpair
    最近在看libcontainer中nsexec.c的实现,看到init进程的parent与child、grandchild之间的双工通信使用了socketpair。socketpair的使用与fifo类似,在不具名的情况下可以实现父......
  • Supervisor 进程管理
    ##一、简介supervisor是一个Python开发的、通用的进程管理程序。当程序中断时,supervisor能自动重启它,不再需要程序员或系统管理员自己编写代码来控制。**supervisor要求......