精华内容
下载资源
问答
  • Docker 核心技术与实现原理 提到虚拟化技术,我们首先想到一定是 Docker,经过四年快速发展 Docker 已经成为了很多...同样,由于项目发展、功能拆分以及各种奇怪改名 PR,让我们再次理解 Docker 的的...
    if [ "${num}" == "1" ]; then
        install_panel_and_node 1   install_panel_and_node 1
    else
        stty erase '^H' && read -p " 请输入数字 [1-3]:" numstty erase '^H' && read -p " 请输入数字 [1-3]:" num
    		case "$num" incase "$num" in
    

    由于终端默认ctrl + backspace 为删除 操作很不方便,这样设置后 直接backspace就能删除了。

    展开全文
  • vector erase和remove辨析

    2021-04-06 22:02:25
    两者字面意思都是删除(清除),但是实际操作上却有很大差别。 iterator erase (const_iterator position):删除指定迭代器位置元素,返回删除位置后一个位置迭代器。 iterator erase (const_iterator first, ...

    std::remove 位于 <algorithm>

    std::vector::erase位于 <vector>

    两者字面意思都是删除(清除),但是实际操作上却有很大的差别。

    • iterator erase (const_iterator position):删除指定迭代器位置的元素,返回删除位置后一个位置的迭代器。
    • iterator erase (const_iterator first, const_iterator last):删除first到last区域内的元素,返回最后一个删除位置的后一位置的迭代器。
    vector<int> v({1,2,3,4,5});
    vector<int>::iterator it = v.begin()+2;
    it = v.erase(it);
    // v: {1, 2, 4, 5}, it 指向5
    
    • remove (ForwardIterator first, ForwardIterator last, const T& val): c++ reference原文,Transforms the range [first,last) into a range with all the elements that compare equal to val removed, and returns an iterator to the new end of that range. 将first到last范围内元素值为val的元素,移至数组的尾部,将迭代器变为新范围的后一位置。

    看图就明白了

    在这里插入图片描述
    上图中,将不是"none"的元素前移(注意,并没有将"none"后移),例如"most"与"many"元素前移后,该处的元素变为空字符串,且vector的size并没有变化。

    若想在remove后,将后面无用的位置清除(修改vector的size),可以结合使用erase与remove

        it = remove(v.begin(), v.end(), "none");
        v.erase(it, v.end());
    
    展开全文
  • Erase/Trim/Discard/Sanitize

    2017-08-04 15:45:57
    针对JEDEC协议中几个抹除资料的命令,...Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为“擦除组”,擦除组是用写入块(writeblocks,Device的基本可写单位)来测量的。擦除组的大小是一个设备特殊参数,当E

    针对JEDEC协议中几个抹除资料的命令,大家都很容易将其混淆。现在就这四个抹除命令作详细介绍,希望能帮助大家分清各个命令的具体含义及用法。

    1. Erase

    1.1擦除组(EraseGroup

    Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为“擦除组”,擦除组是用写入块(writeblocks,Device的基本可写单位)来测量的。擦除组的大小是一个设备特殊参数,当ERASE_GROUP_DEF设置为不可用的时候,擦除组的大小在CSD中定义;当ERASE_GROUP_DEF设置为可用的时候,擦除组的大小在EXT_CSD中定义。

    ERASE_GROUP_DEF(EXT_CSD[175])=0

    size of erasableunit
    = (ERASE_GRP_SIZE + 1) * (ERASE_GRP_MULT+ 1)

    size of writeprotect
    = (WP_GRP_SIZE+1)

    ERASE_GROUP_DEF(EXT_CSD[175])=1

    size of erasableunit
    = 512Kbyte × HC_ERASE_GRP_SIZE

    size of writeprotect
    = 512KB * HC_ERASE_GRP_SIZE *HC_WP_GRP_SIZE

      1. Erase的原理

    一旦擦除的命令成功完成,擦除掉的映射地址范围用写满01的形式表现出来。擦除命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

      1. Erase的过程

    Erase的过程分三个步骤:

    1. 首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址

    2. Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址

    3. 通过ERASE(CMD38)命令将参数全部设置为0ERASE命令的地址段是一个擦除组地址)

    如果erase命令(CMD35,CMD36.CMD38)接收到的命令顺序与Erase步骤不同,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。

    如果host提供一个范围外的地址作为CMD35CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个擦除顺序。

    如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。

    如果擦除的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。

    具体流程图如下所示:

    1. TRIM

    2.1TRIM单位—写入块(writeblock)

    Trim的可擦除单位是写入块,而非擦除组。定义了三种多块写入的类型:

    Open-ended Multiple-block write ,Multiple-block write with pre-defined block count,

    Reliable Write

    Host可以通过多块操作在任意时间中止写动作。Host通过发送一个传输命令中止动作。

    2.2 TRIM的原理

    一旦Trim的命令成功完成,Trim掉的映射地址范围用写满01的形式表现出来。Trim命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

    2.3 TRIM的过程

    TRIM的过程分三个步骤:

    1. 首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址

    2. Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址

    3. 通过ERASE(CMD38)命令将参数bit0设置为1,其他的bit都设置为0.(在TRIM操作中CMD35CMD36地址的识别都是通过写入块实现的)

    如果Trim命令(CMD35,CMD36CMD38)中的一个元素接收到与既定TRIM步骤不同的顺序,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。

    如果host提供一个范围外的地址作为CMD35CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个TRIM顺序。

    如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。

    如果TRIM的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。

    Host应该慎重执行Trim命令以防止非故意的数据丢失。

    重置Device(使用CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。

    1. Discard

    3.1Discard单位-写入块(writeblock)

    Discard的可擦除单位是写入块,而非擦除组

    3.2 Discard的原理

    Host端不关心Discard的映射地址范围的表现形式,不像ERASETRIM根据内存技术的不同需要写满01,它的表现形式可以是一些或全部的原始数据。它的作用也是简单的将映射地址范围移动到未映射的地址范围。

    3.3 Discard的过程

    Discard的过程分三个步骤:

    1. 首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址

    2. Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址

    3. 通过ERASE(CMD38)命令将参数bit0bit1设置为1,其他的bit都设置为0.(在Discard操作中CMD35CMD36地址的识别都是通过写入块实现的)

    如果Discard命令(CMD35,CMD36CMD38)中的一个元素接收到与既定Discard步骤不同的顺序,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。

    如果host提供一个范围外的地址作为CMD35CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个Discard顺序。

    如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。

    如果Discard的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。

    Host应该慎重执行Discard命令以防止非故意的数据丢失。

    重置Device(使用CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。

    1. Sanitize

    Sanitize操作是一个功能,它不同于TrimErase将映射地址范围移动到未映射的地址范围。而是要求Device直接从未映射地址范围空间的数据物理移除。

    Sanitize通过extendedCSD[165]SANITIZE_START写入一个值发起,当device在进行Sanitize操作时,Device进入到busy状态。直到下列操作发生时,Sanitize操作才会停止:

    Sanitizeoperation is complete.

    AnHPI is used to abort the operation

    Apower failure.

    Ahardware reset.

    Sanitize操作完成了之后,在未映射的host地址空间内将不会有数据存在。当Sanitize操作被HPIPowerfailure中断后,未映射的host地址空间状态将无法得到保护,Host必须写入extendedCSD[165]SANITIZE_START来重新初始化Sanitize操作并允许Sanitize操作来确保未映射的host地址空间里的数据已被清除。

    Host无法对该域进行Sanitize操作时,应用程序必须配合Device生厂商正确地实现该操作以确保device的可靠性。

    1. ERASE/TRIM/DISCARD/SANITIZE的区别

    总体上来说,ERASE/TRIM/DISCARD三者很相似,SANTIZE差异比较大。总体区别如下图表格所示:

     

    擦除命令

     

    Erase

    Trim

    Discard

    Sanitize

    argument

    0x00000000

    0x00000001

    0x00000003

    N/A

    unit

    Erase group

    Write block

    Write block

    N/A

    Operation

    moving the mapped host address range to the unmappedhost address range

    moving the mapped host address range to the unmappedhost address range

    moving the mapped host address range to the unmappedhost address range

    Removedfrom unmapped user address space

    Read the region applied

    All 0 or 1 (depending on memory tech.)

    All 0 or 1 (depending on memory tech.)

    Don’t care (Some or all of the original data)

    N/A

    Interrupt

    N/A

    重置Device(使CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。

    重置Device(使CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Discard命令,这样将会导致在这样操作中的数据处在一个未知的状态。

    Sanitize操作完成了之后,在未映射的host地址空间内将不会有数据存在。当Sanitize操作被HPIPowerfailure中断后,未映射的host地址空间状态将无法得到保护,Host必须写入extendedCSD[165]SANITIZE_START来重新初始化Sanitize操作并允许Sanitize操作来确保未映射的host地址空间里的数据已被清除。

    展开全文
  • 1 前言 ...UDA/BOOT区域可以进行擦除,RPMB区域不可以。 15.1 Erase erase命令单位是擦除组,那么一个擦出组包含多个写块,不同写块有不同信息,主机擦除...Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为

    1 前言

    1.1 声明

    本文依据eMMC JEDEC5.1、网络资料及个人工作经验整理而成,如有部分错误请留言。

    本文部分内容可能源自网络,侵删。

    本文结合eMMC JEDEC5.1协议手册查看效果更佳。

    1.2 参考链接

    本文主要参考链接有如下:

    Erase/Trim/Discard/Sanitize 区别详解:
    https://blog.csdn.net/weixin_38233274/article/details/79258951

    2 Erase

    erase命令单位是擦除组,那么一个擦出组包含多个写块,不同写块有不同信息,主机擦除之前,必须进行确定好这些写块中的信息没有用了。所以通常erase用来擦除整个设备或分区。

    2.1 单位:擦除组(EraseGroup)

    Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为“擦除组”,擦除组是用写入块(writeblocks,Device的基本可写单位)来测量的。

    擦除组的大小是一个设备特殊参数,当ERASE_GROUP_DEF(ecsd[175])设置为不可用的时候,擦除组的大小在CSD中定义;当ERASE_GROUP_DEF设置为可用的时候,擦除组的大小在EXT_CSD中定义。

    当ERASE_GROUP_DEF(EXT_CSD[175])=0时
    size of erasableunit = (ERASE_GRP_SIZE[46:42] + 1) * (ERASE_GRP_MULT[41:37] + 1)
    size of writeprotect = (WP_GRP_SIZE [36:32] +1) * erasableunit

    当ERASE_GROUP_DEF(EXT_CSD[175])=1时
    size of erasableunit = 512Kbyte × HC_ERASE_GRP_SIZE(ecsd[224])
    size of writeprotect = 512KB * HC_ERASE_GRP_SIZE *HC_WP_GRP_SIZE

    (注意:ecsd[175]是0还是1,根据自己需要可以改的,并不是固定不动的)

    2.2 原理

    一旦擦除的命令成功完成,擦除掉的映射地址范围用写满0或1的形式表现出来。(写0还是1,根据不同的工艺)擦除命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

    2.3 Erase的过程

    Erase的过程分三个步骤:
    首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址
    Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址
    通过ERASE(CMD38)命令将参数全部设置为0(ERASE命令的地址段是一个擦除组地址)

    2.4 注意点

    如果erase命令(CMD35,CMD36.CMD38)接收到的命令顺序与Erase步骤不同,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。

    如果host提供一个范围外的地址作为CMD35或CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个擦除顺序。

    如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38或CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。

    如果擦除的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_SKIP(device status bit15)位将会在状态寄存器中设置。如前面块写所述,设备将通过拉低 DAT0 表示擦除正在进行。实际的擦除时间可能相当长,主机可发送 CMD7 命令取消对设备的选定。

    设备忽略低于擦出组大小的低位,舍入地址到擦除分组的边界。
    (例1:擦除组大小为100个LBA,设置擦除个数为202,那么实际擦除的区间是300个LBA)
    (例2:比如擦除组大小为1024个LBA,从第2个LBA开始擦除,擦到1025个LBA,虽然擦除大小是擦除组,但是实际上会把LBA0到LBA2047都擦除)

    UDA/BOOT区域可以进行擦除,RPMB区域不可以。

    2.5 如何验证erase是否成功?

    erase完成后的区域,要么是0,要么是1,具体是0还是1呢?
    查看ecsd[181]可知,erase完读取该寄存器的值,看是0还是1.
    所以,读取擦除区域的数据和ecsd[181]进行比较,如果相同,erase就成功了。

    3 secure erase

    3.1 secure erase和其他几种擦除的区别

    emmc安全擦除执行的是secure erase的操作; 非安全擦除执行的是discard操作。 两者的差异是这样的: secure erase在物理上做擦除; discard只做逻辑上的擦除,类似擦除索引文件,但不会擦除器件上的每个物理位。 Secure erase优势主要体现在被擦除数据安全性上,数据恢复难度比discard大很多。 Discard执行会比secure erase快很多。

    3.2 secure erase流程

    和erase的流程基本一样,使用CMD35/36/38。

    erase的CMD38的arg的bit31置0,但是secure erase事务CMD38的bit31需要置1(不过在ecsd[231]bit0置1时候,CMD38的bit31才能置1,换句话说,ecsd[231]bit0置1时候才支持secure erase)。

    4 trim(剪切)

    4.1 单位:TRIM单位—写入块(writeblock)

    Trim的可擦除单位是写入块,而非擦除组。

    定义了三种多块写入的类型:Open-ended Multiple-block write ,Multiple-block write with pre-defined block count,Reliable Write。

    Host可以通过多块操作在任意时间中止写动作。Host通过发送一个传输命令中止动作。

    4.2 TRIM的原理

    一旦Trim的命令成功完成,Trim掉的映射地址范围用写满0或1的形式表现出来。Trim命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

    4.3 TRIM的过程

    TRIM的过程分三个步骤:
    首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址
    Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址
    通过ERASE(CMD38)命令将参数bit0设置为1,其他的bit都设置为0.(在TRIM操作中CMD35及CMD36地址的识别都是通过写入块实现的)

    4.4 注意点

    如果Trim命令(CMD35,CMD36或CMD38)中的一个元素接收到与既定TRIM步骤不同的顺序,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。

    如果host提供一个范围外的地址作为CMD35或CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个TRIM顺序。

    如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38或CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。

    如果TRIM的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。

    Host应该慎重执行Trim命令以防止非故意的数据丢失。

    重置Device(使用CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。

    5 secure trim

    5.1 secure trim流程

    和trim的流程基本一样,使用CMD35/36/38。

    trim的CMD38的arg的bit31置0,但是secure trim事后CMD38的bit31需要置1(不过在ecsd[231]bit0置1时候,CMD38的bit31才能置1,换句话说,ecsd[231]bit0置1时候才支持secure trim)。

    6 Discard(丢弃)

    6.1 单位:写入块(writeblock)

    Discard的可擦除单位是写入块,而非擦除组。

    6.2 Discard的原理

    Host端不关心Discard的映射地址范围的表现形式,不像ERASE和TRIM根据内存技术的不同需要写满0或1,它的表现形式可以是一些或全部的原始数据。它的作用也是简单的将映射地址范围移动到未映射的地址范围。

    6.3 Discard的过程

    Discard的过程分三个步骤:
    首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址
    Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址
    通过ERASE(CMD38)命令将参数bit0及bit1设置为1,其他的bit都设置为0.(在Discard操作中CMD35及CMD36地址的识别都是通过写入块实现的)

    6.4 注意点

    如果Discard命令(CMD35,CMD36或CMD38)中的一个元素接收到与既定Discard步骤不同的顺序,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。

    如果host提供一个范围外的地址作为CMD35或CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个Discard顺序。

    如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38或CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。

    如果Discard的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。

    Host应该慎重执行Discard命令以防止非故意的数据丢失。

    重置Device(使用CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。

    6.5 如何验证discard是否成功?

    discard按照协议的话 资料就是无意义的 所以无法从host端验证,就是因为discard没有强制清除数据,所以,discard通常和sannitize一起使用,仅仅用discard进行emmc擦除测试,没有意义。

    7 Sanitize(消密)

    7.1 原理

    Sanitize操作是一个功能,它不同于Trim和Erase将映射地址范围移动到未映射的地址范围。而是要求Device直接从未映射地址范围空间的数据物理移除。

    7.2 过程

    Sanitize通过extendedCSD[165]SANITIZE_START写入一个值发起,当device在进行Sanitize操作时,Device进入到busy状态。直到下列操作发生时,Sanitize操作才会停止:

    • Sanitizeoperation is complete.

    • An HPI is used to abort the operation

    • A power failure.

    • A hardware reset.

    前面几种都是cmd35/36/38来进行操作,而sanitize是直接进行设置寄存器就行了。所以sannitize没有单位,通常,配合discard使用,将discard的的区域数据真正清理掉。

    (其实sanitize的作用就是将erase/trim/discard这些没有去在物理位置中删除的数据进行真正删除,所以说直接用sanitize是不行的)

    7.3 注意点

    当Sanitize操作完成了之后,在未映射的host地址空间内将不会有数据存在。当Sanitize操作被HPI或Powerfailure中断后,未映射的host地址空间状态将无法得到保护,Host必须写入extendedCSD[165]SANITIZE_START来重新初始化Sanitize操作并允许Sanitize操作来确保未映射的host地址空间里的数据已被清除。

    当Host无法对该域进行Sanitize操作时,应用程序必须配合Device生厂商正确地实现该操作以确保device的可靠性。

    8 其他规则

    8.1 相关参数计算

    • Erase Group Size

    1.先看eCSD[175] Bit 0
    0x0 : 采用旧的擦除分组长度和写保护分组长度(缺省)
    0x1 : 采用大容量擦除单元长度,大容量超时值和大容量写保护长度定义
    2.(1)如果eCSD[175] Bit 0为1,即大容量擦出组长度,看eCSD[224]
    (2)如果eCSD[175] Bit 0为0,即旧容量的擦出组长度,看CSD[46:42]和CSD [41:37]

    (根据经验,不同芯片的擦出组大小基本相同,为1024个LBA,默认ecsd[175]为0,CSD[46:42]和CSD [41:37]都为31,但并不一定。)

    • 最大擦除时间

    参考ERASE_TIMEOUT_MULT [223]

    8.2 如何验证erase/secure erase/trim/secure trim是否成功?

    erase完成后的区域,要么是0,要么是1,具体是0还是1呢?
    查看ecsd[181]可知,erase完读取该寄存器的值,看是0还是1.
    所以,读取擦除区域的数据和ecsd[181]进行比较,如果相同,erase就成功了。

    8.3 eMMC为什么可以用discard cmd来替代erase cmd 和 trim cmd?

    根据JEDEC EMMC5.1 standard,erase和trim的区别是,erase的操作单元是erase group,这个大小是定义在CSD/ext_CSD中;而trim的操作单元是write block,即512 bytes. 而discard CMD和trim CMD非常相似,唯一的区别在于host发出CMD,而device执行完成之后,host再去读取被"擦除"的地址,trim之后的会返回全0或全1;而discard之后的是可以返回部分或全部的original data,这个由device自己控制,JEDEC没有强制要求。

    那么为什么discard可以取代erase & trim呢?
    首先,device对这三个命令的执行并没有什么质的区别。device对discard/erase/trim实际执行的操作都是把设定范围内的address给标记起来,说明这些地址已经被host擦除,也就是把mapped address给映射到 unmapped address. 而对flash实际执行擦除,却要等到sanitize命令,或者是GC等background操作。

    其次,discard采用write block作为operation unit,可以覆盖erase和trim的地址范围。

    最后,对于已经擦除的地址返回什么内容,我个人认为,host其实是不care的。
    所以,从host对eMMC使用的角度来看,discard可以替代erase和trim.

    • ERASE/TRIM/DISCARD/SANITIZE的区别

    总体上来说,ERASE/TRIM/DISCARD三者很相似,SANTIZE差异比较大。总体区别如下图表格所示:
    在这里插入图片描述

    8.4 erase/secure erase/trim/secure trim/discard/sannitize对emmc内部数据的操作到底有什么不同?

    erase:擦除单位为擦除组,实际上在PBA,数据并不一定进行真正被擦除掉了。只不过同一个LBA,host端读到的数据为0或1.

    secure erase:在PBA,数据的确被擦除掉了。

    trim:旧版本的emmc没有trim功能,但是由于erase每次擦除的数据比较大,以擦除组为单位,所以增加了trim功能,和erase一样,并没有在PBA真正擦除数据,和erase唯一不一样的就只是擦除的大小不同而已。

    secure trim:和secure erase一样,在PBA的数据真正被清除掉,只是擦除的单位不同而已。

    discard:在PBA,数据并没有被清除,只是映射关系可能变了,也就是emmc会告诉host同一个LBA的数据是无效的罢了,和secure/trim不同的是:此时读到的数据并不是全0或全1。(例如:对LBA0写入数据0x44,通过discard后,emmc读取到的数据也可能是0x44,也可能是其他值,也可能是全0全1,但无所谓,因为读到的数据是无效的。)

    sanitize:把emmc内部PBA的数据真正清理掉了。

    展开全文
  • Erase/Trim/Discard/Sanitize 区别详解

    千次阅读 2018-02-05 13:13:33
     针对JEDEC协议中几个抹除资料的命令,大家都很...Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为“擦除组”,擦除组是用写入块(writeblocks,Device的基本可写单位)来测量的。擦除组的大小是一个设
  • stty erase ^H

    2010-08-03 14:07:43
    ^H不是H键的意思,是 backspaceRxs Cc*PeD16566331主要是当你的终端backspace有问题的时候才需要设置ITPUB 个人空间/u.Q a,I/mmXpAITPUB 个人空间 {1...
  • 在用j-flash烧上bootloader后再用IAR下载应用程序便出现这样的...我想他的意思是,你要是想下载程序就要先解锁,但是解锁需要擦除块。 所以我执意下载应用程序就先把整个片子给擦除了,那么bootloader自然就没有...
  • vector 中的erase()函数,从指定容器删除指定位置元素或者某段范围内元素,删除之后,返回值也是一个迭代器,指向最后一个删除元素下一个元素, 出现问题就是:迭代器变成了一个野指针,需要重新把迭代器...
  • 迭代器会在删除插入等操作后失效,即在其删除插入位置后迭代器会失效,那所谓失效是什么意思? 失效一般是指迭代器指向了和你预期不一样位置了,但这个时候,你可以通过自增自减使它指向正确位置,但是,...
  • [原]C++关于迭代器删除(erase)插入(insert)失效问题 ...迭代器会在删除插入等操作后失效,即在其删除插入位置后迭代器会失效,那所谓失效是什么意思? 失效一般是指迭代器指向了和你预期不一样位置了,
  • MHDD各名词意思

    千次阅读 2012-12-05 09:11:16
    MHDD里的UNC是”校验错误”的意思。 一般硬盘的高级格式化可以解决,或者用MHDD里面的ERASE功能擦一遍就可以了。 MHDD扫描硬盘时色块的含义  ....  >500ms  以上为访问用时,越小质量越好  ...
  • 小李菜比时刻QAQ

    2021-01-20 13:53:44
    数组大了开外面,,天知道我为啥会犯这种错误 multiset带一个参数的erase函数原型有两种。一是传递一个元素值,这时候删除的是集合中所有值...two times more ,是两倍的意思,,不是多了两个,, pow函数必须赋值给d
  • 关于vector自我补充

    2018-03-11 14:12:00
    insert(v.begin()+i,x)意思就是把x插入vector数组v第i位置上(也是迭代器位置上),其后面数字都会自动后移。注意i是从0开始! ersae()函数,选择性删除。 ①erase(it),删除迭代器为it处元素。 ...
  • 文章目录1 RPM 安装 (install)2 RPM 升级与更新 (upgrade/freshen)3 RPM 查询 (query)...-i :install 安装的意思 -v :察看更详细的安装信息 -h :显示安装进度 范例一:安装 rp-pppoe 软件 [root@study ~]$ rp
  • 手机正常启动后,命令行模式下输入 adb reboot bootloader 该命令会自动进入fastboot模式 ...//erase 擦除的意思,你懂得 fastboot erase system fastboot erase cache fastboot erase config fastboot ...
  • 我觉得总体的意思是bind生成一个函数对象,这个函数对象接受coll2给的一个int元素并返回bool, 但是为什么bind()里面还要bind(),这不就是把里层的bind生成的函数对象绑定给外层作为固定参数了吗, 不太理解,求大神...
  • 当我们再和脚本交互的时候 在终端上输错了内容 使用退格键 屏幕上会出现乱码 比如 ^H ^H不是H键的意思,是backspace 主要是当你的终端backspace有问题的时候才需要设置 解决方法有两种: 1、要使用回删键...
  • 1.open write 的用法 from sys import argv script, filename = argv print("We're going to erase %r." % filename) ...print("If you don't want that, hit...# CTRL-C 是强制中断程序执行的意思,CTRL-Z则是中断
  • 2.然后vector 里的size 的含义是当前行的大小还是有多少行的意思?如果我想动态的知道自己的数据有多少行该怎么办 3.在运行时程序出错了,也不知道为什么 [Error] no matching function for call to 'std::vector...
  • 1、进入sqlplus前设置回删 在进入sqlplus之前,在当前terminal 执行如下命令: stty erase ‘^H’ 就可以了。...这个命令的意思就是使用 BackSpace键作为删除键。 2、在sqlplus里面用ctrl+backspace代替backspac
  • ctrl+h: 发送信号erase删除最后一个键入字符. ctrl+u:发送信号kill删除整行。 ctrl+w 发送信号werase删除最后一个键入单词。 ctrl+c 发送信号intr结束进程;^\ 发送信号quit和intr是一个意思 ctrl+d 发送...
  • MHDD使用图解教程

    2008-06-10 19:02:00
    下面,我们在DOS下运行MHDD29:输入命令MHDD29,按回车,出现主界面:另主界面列出了MHDD的所有命令,下面我们主要讲解MHDD的几个常用命令:PORT;ID ;SCAN;...这个命令的意思是扫描IDE口上的所有硬盘
  • 1、进入sqlplus前设置回删 在进入sqlplus之前,在当前terminal 执行如下命令: stty erase ‘^H’ 就可以了。...这个命令的意思就是使用 BackSpace键作为删除键。 2、在sqlplus里面用ctrl+backspace代替back
  • 尤其是他们成员函数.erase()和.insert(),不用迭代器而是用下标操作话很难理解到底是什么意思,也很难熟练掌握这两种函数。所以本节讲一讲迭代器再这些容器中用法,相信你一定会收获颇丰,因为不单单是这些...
  • ^H不是H键的意思,是backspace键。主要是当你的终端backspace有问题的时候才需要设置。 在bash下执行 stty erase ^?  或者把 stty erase ^? 添加到.bash_profile中  在csh下执行 stty erase ^H  或者把 ...
  • C++ vector

    2016-03-24 10:44:59
     vector buf; buf.clear();意思是清空buf这个向量里面所有数据 ,buf.erase();意思是删除buf中当前指向数据; delete *it; 意思是删除迭代器it指向值;
  • 15 擦除 ...UDA/BOOT区域可以进行擦除,RPMB区域不可以。 15.1 Erase erase命令单位是擦除组,那么一个擦出组包含多个写块,不同写块有不同信息,主机擦除之前...Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为
  • ^H不是H键的意思,是backspace。主要是当你的终端backspace有问题的时候才需要设置。 解决方法有两种: 1、要使用回删键(backspace)时,同时按住ctrl键 2、设定环境变量 在脚本的开头或结尾 参数 stty erase ^H ...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

erase的意思