读书笔记-现代操作系统-3储存管理-3.1无储存器抽象3.2一种储存器抽象:地址空间

3. 储存管理

3.1 无储存器抽象

早期计算机没有内存抽象,都采用物理地址,多道程序设计都采用多线程的方式。
也可以采用静态重定位的方式:为每个程序加上一个固定的常数。速度比较慢且容易出错

3.2一种储存器抽象:地址空间

物理地址暴露带来的严重问题:

  1. 如果用户程序可以寻址内存每个字节,他们很容易破换操作系统
  2. 使用绝对的物理地址,多道程序设计很困难

3.2.1 地址空间的概念

想要互相独立的内存空间,需要解决两个问题:保护和重定位。
更好的办法是新的内存抽象:地址空间——一个进程可用于寻址内存的一套地址集合。每个进程为程序创造了一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间。

  • 基址寄存器和界限寄存器
    采用一种动态重定位的方式,基址寄存器和界限寄存器将程序装载到内存中继续的空闲位置且装载期间无需重定位。
    程序的起始物理地址装载到基址寄存器中,程序的长度装载到界限寄存器中。每个程序在装载之前都会自动加载上基址寄存器的内容。
    • 缺点是每次访问内存都需要加法和比较,如果没特殊的硬件系统会比较慢。

3.2.2 交换技术

所有进程所需要的RAM数量总和超过储存器能够支持的范围,通常由两种策略来解决这个问题:

  • 交换技术(swapping)——即把一个进程完整调入内存,使该进程运行一段时间后,然后把它存回硬盘。
  • 虚拟技术(virtual memory)——使程序在只有一部分被调入内存的情况下运行。

  • 交换技术:
    交换技术在内存空间中产生了多个空闲区(hole),通过把所有的进程尽可能向下移动,有可能将这些小的空闲区合成一大块。这既是内存紧缩(memory compaction)。

    • 如果程序增长该怎么办?
      通常采用的方法,为程序分配内存时通常采取四段的方式,最底层的是程序段,之上是数据段,在之上是为增长预留的空间,最上面是堆栈段。这样在如果程序增长的话数据段向上增长,堆栈段向下增长。如果预留空间不够则内存重新分配。

3.2.3 空闲内存管理

  1. 使用位图的储存管理
    0表示空闲1表示占用,分配单元的大小与位图的大小成反比。但是如果需要查找连续的0串来分配内存是非常耗时的操作。这是位图的缺点。
  2. 使用链表的内存管理
    维护一个已分配内存段和空闲内存段的链表。
    • 优点是当进程终止或被换出时链表的更新非常直接。
    • 为新进程分内存的算法:
      1. 首次适配算法-沿着段链表搜索,直到找到一个足够大的空闲区。
      2. 下次适配算法-记录当前搜索的区域,下次中这里搜索。速度慢于首次适配。
      3. 最佳适配算法-找到适应当前程序的最小程序空闲区。会产生大量的小碎片
      4. 最差适配算法-总是分配最大的可用空闲区。仿真表明也不是很好的算法。
      5. 快速适配算法-为常用大小的空闲区维护一个单独的列表,其实如果对进程内存和空闲内存分别维护可用加快上述四个算法,但同时也增加了维护的成本,快速适配可看做是这种维护的一种简化。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ws2812-5050-RGB-LED是一种智能RGB LED灯,其与STM32微控制器和RT-Thread操作系统结合使用具有很多优势。以下是基于这种组合的使用笔记: 首先,在使用ws2812-5050-RGB-LED之前,我们需要确保已正确连接相应的硬件。这包括将数据引脚连接到STM32的GPIO引脚,然后通过电平转换器将其连接到ws2812 LED的输入引脚。 其次,我们需要在STM32的RT-Thread操作系统上配置相应的驱动程序。可以通过使用RT-Thread的Package Manager来下载并安装相应的驱动程序包。然后,可以在RT-Thread的配置文件中启用WS2812 LED驱动程序。 接下来,我们可以在应用程序中使用WS2812驱动程序来控制RGB LED的颜色和亮度。我们可以通过简单的调用驱动程序提供的函数来实现这一点。首先,我们可以使用“ws2812_init()”函数来初始化LED的数量和PWM参数。然后,我们可以使用“ws2812_set_color()”函数设置每个LED的RGB颜色。最后,我们可以使用“ws2812_refresh()”函数来刷新LED并显示相应的颜色。 在使用WS2812-5050-RGB-LED时,我们需要注意一些问题。首先,由于它是基于PWM控制的,因此我们需要按照WS2812的规范来设置PWM参数,以确保正确的亮度和颜色。其次,我们需要遵循良好的电源管理实践,以确保LED的稳定工作。最后,我们需要小心处理数据传输,以避免干扰和丢失数据。 总的来说,使用WS2812-5050-RGB-LED时,基于STM32和RT-Thread操作系统的组合是一种简单且灵活的选择。通过正确的硬件连接和驱动程序配置,我们可以方便地控制LED的颜色和亮度,从而实现各种令人惊叹的灯光效果。同时,我们也要注意处理数据传输和电源管理等问题,以确保LED的稳定工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值