WO2023136830A1 - Variable memories - Google Patents

Variable memories Download PDF

Info

Publication number
WO2023136830A1
WO2023136830A1 PCT/US2022/012439 US2022012439W WO2023136830A1 WO 2023136830 A1 WO2023136830 A1 WO 2023136830A1 US 2022012439 W US2022012439 W US 2022012439W WO 2023136830 A1 WO2023136830 A1 WO 2023136830A1
Authority
WO
WIPO (PCT)
Prior art keywords
variable
examples
memory
storage device
buffer
Prior art date
Application number
PCT/US2022/012439
Other languages
French (fr)
Inventor
Wei Ze Liu
Chengkai YEH
Erich Wolfgang Gerstacker MCMILLAN
Rosilet Retnamoni BRADUKE
Original Assignee
Hewlett-Packard Development Company, L.P.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett-Packard Development Company, L.P. filed Critical Hewlett-Packard Development Company, L.P.
Priority to PCT/US2022/012439 priority Critical patent/WO2023136830A1/en
Publication of WO2023136830A1 publication Critical patent/WO2023136830A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot

Definitions

  • FIG. 1 is a thread diagram illustrating an example of accessing variables in accordance with some examples of the techniques described herein;
  • FIG. 2 is a block diagram illustrating an example of an electronic device that may be used to store variables
  • FIG. 3 is a block diagram illustrating an example of a computing device to manage variable accesses
  • FIG. 4 is a block diagram illustrating an example of a computer- readable medium for managing variable accesses
  • FIG. 5 is a flow diagram illustrating an example of a variable store in accordance with some examples of the techniques described herein.
  • FIG. 6 is a diagram illustrating an example of a circular buffer that may be utilized in accordance with some examples of the techniques described herein.
  • Some electronic devices may store unified extensible firmware interface (UEFI) variables.
  • a UEFI variable is data accessible for a service (e.g., boot service, runtime service, etc.) on an electronic device.
  • UEFI variables may be accessed in storage via an interface in a procedure that may be relatively slow, taking significant time to erase and program.
  • variables may be stored without sorting. When updating, an existing variable may be invalidated, and a new variable may be appended.
  • a time consuming reclaim procedure may be performed.
  • a UEFI variable procedure may generate a system management interrupt (SMI) to read a variable from, or write a variable to, slower storage.
  • SMI system management interrupt
  • a long latency of a SMI may impact an operating system (OS) and may result in a poor user experience. For instance, a long SMI latency to read or write a variable, a time consuming reclaim procedure, a performance degradation for a growing quantity of variables or variable size, or a combination thereof may decrease performance.
  • Some examples of the techniques described herein may enhance variable access while maintaining data integrity. For instance, fault tolerant updates and interfaces with an OS and UEFI variables may be provided. In some examples, variables may be sorted to increase read speed. In some examples, a copy may be maintained for a variable. In some examples, storage consumption may be reduced for a variable. In some examples, slow reclaim procedures may be avoided. In some examples, SMI latency may be significantly reduced. In some examples, OS impact may be reduced. In some examples, device responsiveness (e.g., user experience) may be enhanced. Some examples may utilize high speed storage, where reading a variable from a storage device or writing a variable to a storage device may be faster and offloaded to a controller.
  • system management mode may access a circular buffer.
  • SMM is an operation mode in which an electronic device (e.g., computing device) may execute instructions separate from (e.g., independently of) an OS.
  • instructions to be executed in SMM may be stored in a portion of memory (e.g., a portion of memory reserved for SMM) that may be referred to as SMM memory.
  • An electronic device may be a device that includes electronic circuitry (e.g., integrated circuitry).
  • a computing device may be an electronic device that includes a processor, logic circuitry, or a combination thereof. Examples of computing devices may include desktop computers, laptop computers, tablet devices, smartphones, televisions, game consoles, smart speakers, voice assistants, Internet of Things (loT) devices, etc.
  • a computing device may utilize processor(s) or logic circuitry to perform an operation or operations.
  • computing devices may execute instructions stored in memory to perform the operation(s). Instructions may be code or programming that specifies functionality or an operation of a processor or logic circuitry.
  • instructions may be stored in non-volatile memory (e.g., Read-Only Memory (ROM), Erasable Programmable Read-Only Memory (EPROM), Electrically Erasable Programmable Read-Only Memory (EEPROM), flash memory, etc.).
  • ROM Read-Only Memory
  • EPROM Erasable Programmable Read-Only Memory
  • EEPROM Electrically Erasable Programmable Read-Only Memory
  • flash memory etc.
  • different memories in an electronic device may store separate instructions for different circuitries.
  • FIG. 1 is a thread diagram illustrating an example of accessing variables in accordance with some examples of the techniques described herein.
  • FIG. 1 illustrates examples of a BIOS 101 , a host memory 103, a controller 105, and a storage device 107.
  • the host memory 103, the controller 105, and the storage device 107 may be respective examples of the memory 204, the controller 206, and the storage device 208 described in FIG. 2.
  • portions of the electronic device 202 may be coupled via an interface (e.g., bus(es), wire(s), connector(s), etc.).
  • the term “couple” or “coupled” may denote a direct connection (without an intervening component) or an indirect connection (with an intervening component(s)).
  • the BIOS 101 and the controller 105 may be coupled to the host memory 103 via a bus.
  • the controller 105 may be coupled to the storage device 107 via an interface (e.g., inter integrated circuit (I2C) bus, I3C bus, universal serial bus (USB) interface, serial peripheral interface (SPI), or a combination thereof.
  • the BIOS 101 , host memory 103, controller 105, and storage device 107 may be components of an apparatus, electronic device (e.g., electronic device 202), or computing device (e.g., computing device 338).
  • BIOS basic input/output system
  • a BIOS refers to hardware or hardware and instructions to initialize, control, or operate a device (e.g., computing device 338, electronic device 202, etc.) prior to execution of an operating system (OS) of the device.
  • OS operating system
  • Instructions included within a BIOS may be software, firmware, microcode, or other programming that defines or controls functionality or operation of a BIOS.
  • a BIOS may be implemented using instructions, such as platform firmware of a device, executable by a processor.
  • a BIOS may operate or execute prior to the execution of the OS of a device.
  • a BIOS may initialize, control, or operate components such as hardware components of a device and may load or boot the OS of a device.
  • a BIOS may provide or establish an interface between hardware devices or platform firmware of the device and an OS of the device, via which the OS of the device may control or operate hardware devices or platform firmware of the device.
  • a BIOS may implement the UEFI specification or another specification or standard for initializing, controlling, or operating a device.
  • a “BIOS” e.g., BIOS 101 , BIOS 336, etc.
  • BIOS may refer to a processor (e.g., host central processing unit (CPU)) to execute instructions to perform a BIOS operation.
  • a host CPU is a largest processor, a processor capable of performing a largest quantity of logic operations (e.g., greatest operation throughput), or a combination thereof on an electronic device (e.g., computing device).
  • the host memory 103 is an electronic, magnetic, optical, other physical storage device, or a combination thereof that contains or stores electronic data (e.g., information, instructions, or a combination thereof).
  • the host memory 103 may be, for example, Random Access Memory (RAM), Electrically Erasable Programmable Read-Only Memory (EEPROM), a storage device, an optical disc, the like, or a combination thereof.
  • RAM Random Access Memory
  • EEPROM Electrically Erasable Programmable Read-Only Memory
  • the host memory 103 may be volatile or non-volatile memory, such as Dynamic Random Access Memory (DRAM), EEPROM, magnetoresistive random-access memory (MRAM), phase change RAM (PCRAM), Synchronous Dynamic Random Access Memory (SDRAM), Double Data Rate (DDR) RAM, memristor, flash memory, the like, or a combination thereof.
  • DRAM Dynamic Random Access Memory
  • MRAM magnetoresistive random-access memory
  • PCRAM phase change RAM
  • SDRAM Synchronous Dynamic Random Access Memory
  • DDR Double Data Rate
  • memristor flash memory
  • the host memory 103 may be a non-transitory tangible machine-readable storage medium, where the term “non-transitory” does not encompass transitory propagating signals.
  • the host memory 103 may include multiple devices (e.g., a RAM card and a solid-state drive (SSD)).
  • SSD solid-state drive
  • the host memory 103 may be associated with a host CPU of an electronic device. In some examples, the host memory 103 may have a largest volatile storage capacity of memory devices of an electronic device (e.g., computing device). In some examples, the host memory 103 may be host RAM of an electronic device. In some examples, the host memory 103 may be coupled to a motherboard of an electronic device (via RAM slot(s), for instance). [0016] FIG. 1 illustrates an example of an initialization operation 109. At 113, the BIOS 101 may allocate a buffer in host memory 103. A buffer is a portion of memory. In some examples, the buffer is a UEFI variable buffer.
  • the BIOS 101 may allocate the buffer when the host memory 103 is initialized (in a boot procedure, for instance). In some examples, the BIOS 101 may allocate the buffer by writing a data structure to the host memory 103, by reserving a portion of the host memory 103 for the buffer, or a combination thereof.
  • the BIOS 101 sends a buffer address to the controller 105.
  • the BIOS 101 may send information (e.g., pointer, memory offset, index, etc.) indicating an address of the buffer in the host memory 103 to the controller 105.
  • the controller 105 may be a logic circuit, processor, embedded controller, etc.
  • the controller 105 may control communication between components of the electronic device.
  • the controller 105 may utilize the address of the buffer in the host memory 103 to read data from the buffer, to write data to the buffer, or a combination thereof.
  • the controller 105 is separate from a CPU or is not a CPU.
  • the controller 105 may send an initialization command to the controller 105.
  • the initialization command may instruct the controller 105 to read a variable store from the storage device 107 and load the variable store to the host memory 103.
  • a variable store is data indicating a variable or variables (e.g., UEFI variable(s)).
  • UEFI variables used for a UEFI boot manager may include: Boot#### (where “####” is a hexadecimal value, for instance), BootOrder (an ordered boot option load list, for instance), BootNext (a boot option for a next boot, for instance), and BootCurrent (a boot option selected for a current boot, for instance).
  • PlatformLang is another example of a UEFI variable that indicates a set language for a device, to which a program or application may refer to set a default language.
  • the controller 105 reads the variable store from the storage device 107.
  • the storage device 107 may include a UEFI variable store.
  • the variable store may be sorted based on an identifier.
  • An identifier is information that identifies a variable.
  • an identifier may be a globally unique identifier (GUID), a name, or a combination of both.
  • the variable store (e.g., the variables in the variable store) may be sorted (e.g., ordered) in an order of the identifier (e.g., ascending GUID order, descending GUID order, alphabetical name order, reverse alphabetical name order, etc.).
  • the controller 105 loads a variable to the host memory 103.
  • the controller 105 may load a UEFI variable from the storage device 107 to the buffer in the host memory 103.
  • the controller 105 may load the variable to the host memory 103 via direct memory access.
  • the controller 105 may load the variable(s) from the storage device 107 to the host memory 103 independently of a host CPU (e.g., without host CPU intervention).
  • loading the variable(s) may include copying the variable store from the storage device 107 to the host memory 103.
  • the controller 105 may execute a command(s) to read data from the storage device 107 and to write the data to the host memory 103.
  • an SMM (e.g., single-thread execution mode) may be enabled.
  • the BIOS 101 may allocate a second buffer in SMM of the host memory 103. For instance, the BIOS 101 may allocate a second buffer in a portion of the host memory 103 reserved for SMM. For instance, the BIOS 101 may copy the buffer (e.g., UEFI variable buffer) from UEFI reserved memory to SMM memory.
  • the buffer e.g., UEFI variable buffer
  • FIG. 1 illustrates an example of a get variable operation 135.
  • the BIOS 101 compares a variable identifier.
  • the BIOS 101 may compare a given variable identifier (e.g., GUID, name, or a combination of both) with a variable identifier in the host memory 103.
  • the BIOS 101 may compare a given variable identifier with a central list variable identifier.
  • a central list variable identifier is a variable identifier at a middle of sorted list of variable identifiers.
  • the BIOS 101 may compare the given variable identifier with a variable’ GUID and name starting from a middle of a variable list.
  • the BIOS 101 may adjust the variable list to be either the first half of the list (e.g., first sublist) or the second half (e.g., second sublist).
  • the BIOS 101 may search from the middle of the sublist and so on. If the variable is found (e.g., the given identifier is equal to the identifier of the variable being compared), the BIOS 101 may return the variable. If the variable is not found, the BIOS 101 may return an error.
  • FIG. 1 illustrates an example of a set variable operation 137.
  • the BIOS 101 copies a table in the host memory 103.
  • the variable store in the host memory 103 may include a directory table.
  • An example of a directory table is given in FIG. 5.
  • the BIOS 101 may copy an active directory table to a backup directory table in the host memory 103.
  • the BIOS 101 locates a target variable in the host memory 103 (e.g., active directory table). For instance, based on the identifier (e.g., GUID and name), the BIOS 101 may locate the variable to be deleted or updated. In the case of a variable addition (e.g., insertion), the BIOS 101 may locate the variable with an identifier that is greater than the new variable and a neighboring variable with an identifier that is smaller than the identifier of the new variable.
  • a target variable in the host memory 103 e.g., active directory table. For instance, based on the identifier (e.g., GUID and name), the BIOS 101 may locate the variable to be deleted or updated. In the case of a variable addition (e.g., insertion), the BIOS 101 may locate the variable with an identifier that is greater than the new variable and a neighboring variable with an identifier that is smaller than the identifier of the new variable.
  • the BIOS 101 updates the target variable. For instance, the BIOS 101 may write data to the target variable or a new variable. In some examples, the BIOS 101 may allocate a block and fill the block with a variable header and variable body. In some examples, the BIOS 101 may update a block status table. An example of a block status table is given in FIG. 5. In some examples, the BIOS 101 may update a directory header. For instance, the directory header may be updated such that the updated variable (e.g., new variable, changed variable, etc.) is at a location indicated by a variable entry list, and may be updated such that a variable total indicates the quantity of variables. An example of a directory header is given in FIG. 5.
  • the BIOS 101 may update a block with a directory status in a directory table (e.g., the active directory table).
  • a directory table e.g., the active directory table
  • the BIOS 101 may calculate a hash-based message authentication code (HMAC).
  • HMAC hash-based message authentication code
  • the BIOS 101 may apply and fill a circular buffer.
  • a block with a directory status may be a last block to be processed.
  • the BIOS 101 sends a command to the controller 105. The command may instruct the controller 105 to read a circular buffer(s) and write the data to the storage device 107.
  • the controller 105 reads the circular buffer from the host memory 103.
  • the controller 105 may write the target variable (or the variable store) to the storage device 107.
  • the controller 105 may read a circular buffer in the host memory 103 and write the target variable to the storage device 107.
  • the controller 105 may read a circular buffer(s) via direct memory access and write to the storage device 107 accordingly.
  • FIG. 1 provides examples of accessing variables in accordance with some of the techniques described herein.
  • FIG. 2 is a block diagram illustrating an example of an electronic device 202 that may be used to store variables.
  • the electronic device 202 may include a computer (e.g., desktop computer, laptop computer, etc.), a smartphone, a tablet computer, a game console, etc.
  • the electronic device 202 may include a memory 204, controller 206, and a storage device 208.
  • the electronic device 202 may include a CPU.
  • the CPU may be a processor to perform an operation on the electronic device 202. Examples of the CPU may include a general-purpose processor, a microprocessor, etc.
  • the CPU may be an application processor.
  • the CPU may execute instructions (e.g., an application) on the electronic device 202.
  • the memory 204 is an electronic, magnetic, optical, other physical storage device, or a combination thereof that contains or stores electronic data (e.g., information and instructions).
  • the memory 204 may be, for example, RAM, EEPROM, a storage device, an optical disc, the like, or a combination thereof.
  • the memory 204 may be volatile or non-volatile memory, such as DRAM, EEPROM, MRAM, PCRAM, SDRAM, DDR RAM, memristor, flash memory, the like, or a combination thereof.
  • the memory 204 may be a non-transitory tangible machine-readable storage medium.
  • the memory 204 may include multiple devices (e.g., a RAM card and an SSD).
  • the memory 204 may be associated with a CPU of the electronic device 202.
  • the memory 204 may store instructions for execution by the CPU.
  • the memory 204 may be separate from the storage device 208.
  • the memory 204 may have a larger storage capacity than the storage device 208.
  • the memory 204 may be host RAM of the electronic device 202.
  • the memory 204 may be coupled to a motherboard of the electronic device 202 (via RAM slot(s), for instance).
  • the controller 206 may be a logic circuit.
  • the controller 206 may be a logic circuit capable of performing logical operations.
  • Examples of the controller 206 may include a processor, field-programmable gate array (FPGA), application-specific integrated circuit (ASIC), controller, engine, etc.
  • the controller 206 may be an embedded controller.
  • the controller 206 may be attached (e.g., soldered) to a motherboard of the electronic device 202.
  • the storage device 208 is non-volatile memory circuitry.
  • the storage device 208 may be an embedded multimediacard (eMMC) storage device, a nonvolatile memory express (NVMe) storage device, or a universal serial bus (USB) storage device.
  • eMMC embedded multimediacard
  • NVMe nonvolatile memory express
  • USB universal serial bus
  • the storage device 208 may be attached (e.g., soldered) to a motherboard of the electronic device 202.
  • the storage device 208 may be separate from a host hard drive of the electronic device 202.
  • the controller 206 may be coupled to the memory 204 and to the flash memory.
  • the controller 206 may be coupled to the memory 204 with an interface, wire, bus, or a combination thereof.
  • the coupling between the controller 206 and the memory 204 may provide direct memory access to the memory 204.
  • the controller 206 may be coupled to the storage device 208 by an I3C bus, a USB interface, a SPI bus (e.g., enhanced SPI (eSPI) bus), or a combination thereof.
  • eSPI enhanced SPI
  • the electronic device 202 may include an I3C bus, USB interface, SPI bus, or a combination thereof, where the controller 206 may read the storage device 208, may access the storage device 208, or may perform a combination thereof.
  • the storage device 208 includes a UEFI variable store that is sorted based on an identifier.
  • the identifier includes a GUID, a variable name, or a combination thereof.
  • the storage device 208 may include UEFI variables that are ordered based on a GUID, a name, or a combination thereof (e.g., a number(s), string(s), alphanumeric characters, etc.).
  • variables may be sorted based on the identifier (e.g., GUID and name) in memory 204, in the storage device 208, or in a combination thereof.
  • a copy of each variable may be stored.
  • the storage device 208 may be a sector-based storage device (e.g., eMMC, NVMe, or USB accessible storage). In some examples, the storage device 208 is not flash storage or excludes flash storage. In some examples, the storage device 208 may be a relatively high-speed storage device.
  • the memory 204 includes a buffer.
  • a buffer(s) may be allocated in the memory 204 to store the variable(s) (e.g., UEFI variable(s)) from the storage device 208.
  • the electronic device 202 includes a BIOS (not shown in FIG. 2) to allocate the buffer in the memory 204.
  • the buffer(s) may be initialized (e.g., initially written) by a BIOS of the electronic device 202.
  • the buffer(s) may be stored in reserved memory (e.g., UEFI reserved memory). Reserved memory is a portion of memory 204.
  • reserved memory may be a portion of the memory 204 reserved for use by a BIOS.
  • the controller 206 may load a UEFI variable from the storage device 208 to the buffer in the memory 204 via direct memory access.
  • some examples of the techniques described herein may provide approaches to manage a UEFI variable(s).
  • the storage device 208 may be connected to the controller 206 (e.g., embedded controller).
  • the controller 206 may be direct memory access capable and may transfer UEFI variables to the memory 204 from the storage device 208, from the storage device 208 to the memory 204, or a combination thereof.
  • the buffer is included in SMM memory (in the memory 204, for instance) when SMM is enabled.
  • the memory 204 may include a circular buffer.
  • the first buffer may include UEFI variables (e.g., all UEFI variables).
  • the first buffer may be stored in SMM memory when SMM is enabled.
  • the second buffer may be stored in UEFI reserved memory.
  • the second buffer may be a circular buffer.
  • the circular buffer may communicate an update to the controller 206.
  • the circular buffer may be utilized for a UEFI variable service to communicate any variable update to the controller 206.
  • variable store occupies a continuous region in the storage device 208. In some examples, the variable store occupies a continuous region in the memory 204. For instance, the variable store may be stored in a continuous region in the memory 204, may be stored in a continuous region in the storage device 208, or in a combination thereof. In some examples, the variable store may be managed as a continuous region (e.g., continuous address range).
  • the variable store may include an active directory table and a backup directory table. For instance, there may be two copies of a directory table. At a given time, one directory table may be an active directory table and the other directory table may be a backup directory table (or working area, for example).
  • a directory table may include a set (e.g., list) of ordered entries. An entry may correspond to a variable, where an entry may include a pointer to an initial block and a status for a block.
  • a variable change operation e.g., update, addition, deletion, etc.
  • blocks for variable data may be allocated or freed (and potentially updated, for instance).
  • the backup directory table may be updated with the block status and new order of variables.
  • the electronic device 202 may perform one, some, or all of the aspects, operations, elements, etc., described in one, some, or all of FIG. 1-6. In some examples, the electronic device 202 may include an element described in one, some, or all of FIG. 1-6.
  • FIG. 3 is a block diagram illustrating an example of a computing device 338 to manage variable accesses.
  • the computing device 338 may perform the operations described in FIG. 1 , FIG. 2, FIG. 4, FIG. 5, FIG. 6, or a combination thereof.
  • the computing device 338 may be an example of the electronic device 202 described in FIG. 2.
  • the computing device 338 may include a host memory 324, a storage device 368, a BIOS 336, a controller 366, or a combination thereof.
  • the computing device 338 may include a host CPU.
  • the BIOS 336 may be a host CPU to execute an instruction to perform a BIOS operation.
  • Examples of the computing device 338 may include a computing device, smartphone, laptop computer, tablet device, mobile device, etc.
  • one, some, or all of the components of the computing device 338 may be structured in hardware (e.g., circuitry).
  • the components described in FIG. 3 may be examples of corresponding components described in FIG. 1 , FIG. 2, or a combination thereof.
  • the computing device 338 may perform one, some, or all of the operations described in FIG. 1-6.
  • the BIOS 336 may allocate a first buffer 346 in the host memory 324. For instance, the BIOS 336 may allocate the first buffer 346 in reserved memory 344 (e.g., UEFI reserved memory) of the host memory 324. In some examples, the BIOS 336 may send an initialization command to the controller 366 with a buffer address (e.g., an address of the first buffer 346). For instance, the BIOS 336 may send an address indication to the controller 366. For example, the BIOS 336 may send an address of the first buffer 346 in the host memory 324 to the controller 366. In some examples, the BIOS 336 may send the address indicator when the BIOS 336 allocates the first buffer 346 or after the BIOS 336 completes allocating the first buffer 346 (e.g., after boot).
  • a buffer address e.g., an address of the first buffer 346
  • the BIOS 336 may send an address indication to the controller 366.
  • the BIOS 336 may send an address of the first buffer 3
  • the controller 366 may read a UEFI variable from the storage device 368. For instance, during an initialization operation, the controller 366 may read a UEFI variable (e.g., variable store) from the storage device 368. In some examples, the controller 366 may read the UEFI variable from the storage device 368 via a I3C interface, USB interface, SPI, or a combination thereof. In some examples, the controller 366 may store the UEFI variable in the first buffer 346 in the host memory 324 via direct memory access. For instance, the controller 366 may load the UEFI variable to the first buffer 346 over an interface that supports direct memory access to the host memory 324 (e.g., access to the host memory 324 without host CPU intervention).
  • a UEFI variable e.g., variable store
  • the controller 366 may store the UEFI variable in the first buffer 346 in the host memory 324 via direct memory access. For instance, the controller 366 may load the UEFI variable to the first buffer 346 over an interface that supports direct memory
  • the computing device 338 may perform a get variable operation. For instance, the computing device 338 may perform a get variable operation 135 as described in FIG. 1.
  • the BIOS 336 may compare a variable identifier with a central list variable identifier. The BIOS 336 may compare the variable identifier with a central sublist variable identifier in response to determining that the variable identifier does not match the central list variable identifier.
  • the get variable operation may utilize a search approach that searches from a middle variable in a sorted list of variables. If a variable identifier does not match the identifier of the middle variable, the BIOS 336 may determine whether the variable identifier is less than or greater than the identifier of the middle variable.
  • the upper sublist may be selected.
  • the lower sublist may be selected.
  • the identifier of the middle variable of the selected sublist may be compared to the variable identifier. This procedure may iterate until the variable is found or the remaining sublist is an empty set.
  • the sorted nature of the variables may enable faster operations to find a variable (relative to unsorted structures of variables, for instance).
  • the computing device 338 may perform a set variable operation. For instance, the computing device 338 may perform a set variable operation 137 as described in FIG. 1.
  • the BIOS 336 may copy an active directory table to a backup directory table in the host memory 324.
  • the BIOS 336 may copy an active directory table to a backup directory table in the first buffer 346 (e.g., variable store of the first buffer 346) in the host memory 324.
  • the BIOS 336 may locate a target variable in the active directory table. For instance, the BIOS 336 may utilize a search procedure similar to that utilized in the get variable operation. In some examples, the BIOS 336 may update the target variable.
  • the BIOS 336 may write data to the target variable, may delete the target variable, or may add a new target variable (in a case that the target variable was not located, for example).
  • the BIOS 336 may send a command to the controller 366.
  • the controller 366 may read a circular buffer 348 in the host memory 324 and may write the target variable to the storage device 368.
  • the circular buffer 348 may be allocated in reserved memory 344 in the host memory 324.
  • the controller 366 may read the circular buffer 348 via direct memory access and may update the storage device 368 using the data read from the circular buffer 348.
  • the host memory 324 may include SMM memory 350.
  • the SMM memory 350 may include a second buffer 352.
  • the second buffer 352 may be allocated for use in SMM. For instance, when SMM is enabled, the second buffer 352 may be allocated in the SMM memory 350, and the first buffer 346 (e.g., UEFI variable buffer) may be copied from the reserved memory 344 to the SMM memory 350.
  • the first buffer 346 e.g., UEFI variable buffer
  • FIG. 4 is a block diagram illustrating an example of a computer- readable medium 480 for managing variable accesses.
  • the computer-readable medium 480 is a non-transitory, tangible computer-readable medium.
  • the computer-readable medium 480 may be, for example, RAM, DRAM, EEPROM, MRAM, PCRAM, a storage device, an optical disc, the like, or a combination thereof.
  • the computer-readable medium 480 may be volatile memory, non-volatile memory, or a combination thereof.
  • the computer-readable medium 480 described in FIG. 4 may be an example of memory including instructions to be executed by a circuitry (e.g., logic circuit, processor, controller, engine, etc.) to access a variable.
  • a circuitry e.g., logic circuit, processor, controller, engine, etc.
  • the computer-readable medium 480 may be an example of memory (e.g., embedded memory) of a controller.
  • the computer-readable medium 480 may include data (e.g., information, instructions).
  • the computer-readable medium 480 includes reading instructions 482 and storage instructions 484.
  • the reading instructions 482 may include instructions when executed cause a processor (e.g., controller) of an electronic device to read, from a storage device, a UEFI variable store that is sorted based on an identifier.
  • a processor e.g., controller
  • reading the UEFI variable store may be performed as described in FIG. 1 , FIG. 2, FIG. 3, FIG. 5, or a combination thereof.
  • the storage instructions 484 may include instructions when executed cause the processor (e.g., controller) to store, in host memory via direct memory access, the UEFI variable store.
  • the UEFI variable store may include a first directory table including a first status indicator, a second directory table indicating a second status indicator, and a plurality of blocks. In some examples, storing the UEFI variable store may be performed as described in FIG. 1 , FIG. 2, FIG. 3, FIG. 5, or a combination thereof.
  • the first directory table includes a block pointer indicating a location of an initial block of a UEFI variable.
  • An example of a first directory table is given in FIG. 5.
  • the host memory 324 includes a circular buffer 348 read by a controller to update the UEFI variable store in the storage device 368.
  • a circular buffer is given in FIG. 6.
  • FIG. 5 is a flow diagram illustrating an example of a variable store 586 in accordance with some examples of the techniques described herein.
  • the variable store 586 is a data structure to store a variable or variables.
  • the variable store 586 may be stored in a storage device, in a host memory 324, or a combination thereof.
  • the variable store 586 may include 2 megabytes (MB) of data.
  • the variable store 586 may include a first directory table 588, a second directory table 590, and blocks 592.
  • the first directory table 588 may include a directory header 594 and a block status table 541.
  • the directory header 594 may include a status 596, a variable total 598, and entries 539.
  • the status 596 may be data indicating whether the first directory table 588 has an active or backup status.
  • the variable total 598 may indicate a quantity of variables stored in the variable store 586.
  • the entries 539 may be data, where an entry indicates a pointer to an initial block corresponding to a variable.
  • the directory header 594 may be 2 kilobytes (kB) of data
  • the status 596 may be 2 bytes of data
  • the variable total 598 may be 2 bytes of data
  • each of the entries 539 may be 2 bytes of data. In some examples, there may be 1023 entries 539.
  • the block status table 541 may indicate a status for each of the blocks 592.
  • the block status table 541 may include a block status for each of the blocks 592, where each block status indicates whether a block is occupied or available (for writing new data or a variable, for example).
  • a block status may be a flag or flags to indicate whether new data may be written to the block or whether the block is occupied with current variable data.
  • the size of the block status table 541 may be determined by a quantity of blocks 592.
  • the second directory table 590 may include data similar to the first directory table 588.
  • the first directory table 588 may be 4 kB of data and the second directory table 590 may be 4 kB of data.
  • the blocks 592 may be blocks of data.
  • a block may be allocated 128 bytes of data.
  • a variable 543 may be stored in one block or across multiple blocks.
  • a variable 543 may include a variable header 545 and a variable body 551 .
  • the variable header 545 may include a block total 547 and block pointers 549.
  • the block total 547 may be represented by 1 byte of data.
  • the block total 547 may indicate a quantity of blocks (of the blocks 592) occupied by the variable 543.
  • a block pointer may include 2 bytes of data.
  • the block pointers 549 may point to a set of the blocks 592 occupied by the variable 543.
  • a variable 543 may be stored in one block or multiple blocks (of blocks 592). In a case of multiple blocks, a block pointer may point to a next block.
  • FIG. 6 is a diagram illustrating an example of a circular buffer 663 that may be utilized in accordance with some examples of the techniques described herein.
  • multiple circular buffers may be utilized.
  • a circular buffer e.g., ring buffer
  • a circular buffer is a buffer with a contiguous or circular memory characteristic. With a circular buffer, for instance, as data in memory is generated and consumed, data in the circular buffer may avoid reshuffling by adjusting a head pointer, a tail pointer, or a combination of both. When data is added, for instance, the head pointer may advance.
  • a circular buffer may provide a first-come-first-serve processing order.
  • the circular buffer 663 may include 256 bytes of data.
  • the circular buffer 663 may include a buffer header 665 and a buffer body 669.
  • the buffer body 669 may include 128 bytes of data.
  • the buffer header 665 may include an HMAC 667.
  • a circular buffer includes a block that is similar to (e.g., the same as) a block in the variable store and a buffer header 665 with a HMAC 667 to protect the block from attack.
  • a HMAC is a message authentication code (MAC) acquired by executing a cryptographic hash function on data to be authenticated and a shared key.
  • a UEFI BIOS generates the shared key early in a POST procedure and sends the shared key to a controller (e.g., embedded controller). With the shared key, the BIOS may calculate the hash of the buffer and store the hash (e.g., HMAC) in a header (e.g., buffer header 665). In some examples, the controller may use the shared key to verify the hash against a circular buffer to ensure data integrity and authentication.
  • a controller e.g., embedded controller
  • the BIOS may calculate the hash of the buffer and store the hash (e.g., HMAC) in a header (e.g., buffer header 665).
  • the controller may use the shared key to verify the hash against a circular buffer to ensure data integrity and authentication.
  • multiple circular buffers may be utilized.
  • a variable with multiple blocks may have a same quantity of circular buffer blocks in a sequential order.
  • sequential order may be utilized instead of a random order in a variable store of some approaches.
  • a controller e.g., embedded controller
  • a controller may use a location indicated by a buffer start index (e.g., an “in-use buffer start index”) to pick up a circular buffer for a variable update, where an initial block indicates a quantity of blocks for the controller to access in sequential order for the variable update.
  • the controller may construct the variable and update the storage device.
  • the controller may move the buffer start index (e.g., “in-use buffer start index”).
  • a circular buffer status 653 may be utilized (e.g., stored in memory or storage).
  • the circular buffer status 653 may be data indicating a status of the circular buffer 663.
  • the circular buffer status 653 includes a circular buffer address 655, a circular buffer length 657, a buffer start index 659, and a buffer end index 661.
  • a circular buffer(s) within a range of the buffer start index 659 (e.g., in-use buffer start index) and the buffer end index 661 (e.g., in-use buffer end index) may be in-use or occupied.
  • a circular buffer(s) outside of the range may be available or free.
  • items described with the term “or a combination thereof” may mean an item or items.
  • the phrase “A, B, C, or a combination thereof” may mean any of: A (without B and C), B (without A and C), C (without A and B), A and B (but not C), B and C (but not A), A and C (but not B), or all of A, B, and C.

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Examples of electronic devices are described herein. In some examples, an electronic device includes a storage device including a unified extensible firmware interface (UEFI) variable store that is sorted based on an identifier. In some examples, the electronic device includes a memory including a buffer. In some examples, the electronic device includes a controller coupled to the storage device and to the memory. In some examples, the controller is to load a UEFI variable from the storage device to the buffer in the memory via direct memory access.

Description

VARIABLE MEMORIES
BACKGROUND
[0001] Electronic technology has advanced to become virtually ubiquitous in society and has been used for many activities in society. For example, electronic devices are used to perform a variety of tasks, including work activities, communication, research, and entertainment. Different varieties of electronic circuitry may be utilized to provide different varieties of electronic technology.
BRIEF DESCRIPTION OF THE DRAWINGS
[0002] FIG. 1 is a thread diagram illustrating an example of accessing variables in accordance with some examples of the techniques described herein;
[0003] FIG. 2 is a block diagram illustrating an example of an electronic device that may be used to store variables;
[0004] FIG. 3 is a block diagram illustrating an example of a computing device to manage variable accesses;
[0005] FIG. 4 is a block diagram illustrating an example of a computer- readable medium for managing variable accesses;
[0006] FIG. 5 is a flow diagram illustrating an example of a variable store in accordance with some examples of the techniques described herein; and
[0007] FIG. 6 is a diagram illustrating an example of a circular buffer that may be utilized in accordance with some examples of the techniques described herein. DETAILED DESCRIPTION
[0008] Some electronic devices (e.g., computing devices) may store unified extensible firmware interface (UEFI) variables. A UEFI variable is data accessible for a service (e.g., boot service, runtime service, etc.) on an electronic device. In some approaches, UEFI variables may be accessed in storage via an interface in a procedure that may be relatively slow, taking significant time to erase and program. In some approaches, variables may be stored without sorting. When updating, an existing variable may be invalidated, and a new variable may be appended. In some approaches, there may be multiple copies of a variable(s) stored, which consumes space. Read access may be slow, where reading may include traversing all valid and invalidated variables. In some approaches, when variable storage is full, a time consuming reclaim procedure may be performed. At runtime, a UEFI variable procedure may generate a system management interrupt (SMI) to read a variable from, or write a variable to, slower storage. A long latency of a SMI may impact an operating system (OS) and may result in a poor user experience. For instance, a long SMI latency to read or write a variable, a time consuming reclaim procedure, a performance degradation for a growing quantity of variables or variable size, or a combination thereof may decrease performance.
[0009] Some examples of the techniques described herein may enhance variable access while maintaining data integrity. For instance, fault tolerant updates and interfaces with an OS and UEFI variables may be provided. In some examples, variables may be sorted to increase read speed. In some examples, a copy may be maintained for a variable. In some examples, storage consumption may be reduced for a variable. In some examples, slow reclaim procedures may be avoided. In some examples, SMI latency may be significantly reduced. In some examples, OS impact may be reduced. In some examples, device responsiveness (e.g., user experience) may be enhanced. Some examples may utilize high speed storage, where reading a variable from a storage device or writing a variable to a storage device may be faster and offloaded to a controller. In some examples, system management mode (SMM) may access a circular buffer. SMM is an operation mode in which an electronic device (e.g., computing device) may execute instructions separate from (e.g., independently of) an OS. In some examples, instructions to be executed in SMM may be stored in a portion of memory (e.g., a portion of memory reserved for SMM) that may be referred to as SMM memory.
[0010] An electronic device may be a device that includes electronic circuitry (e.g., integrated circuitry). A computing device may be an electronic device that includes a processor, logic circuitry, or a combination thereof. Examples of computing devices may include desktop computers, laptop computers, tablet devices, smartphones, televisions, game consoles, smart speakers, voice assistants, Internet of Things (loT) devices, etc. A computing device may utilize processor(s) or logic circuitry to perform an operation or operations. In some examples, computing devices may execute instructions stored in memory to perform the operation(s). Instructions may be code or programming that specifies functionality or an operation of a processor or logic circuitry. In some examples, instructions may be stored in non-volatile memory (e.g., Read-Only Memory (ROM), Erasable Programmable Read-Only Memory (EPROM), Electrically Erasable Programmable Read-Only Memory (EEPROM), flash memory, etc.). In some examples, different memories in an electronic device may store separate instructions for different circuitries.
[0011] Throughout the drawings, similar reference numbers may designate similar or identical elements. When an element is referred to without a reference number, this may refer to the element generally, without limitation to any particular drawing or figure. In some examples, the drawings are not to scale, and the size of some parts may be exaggerated to more clearly illustrate the example shown. Moreover, the drawings provide examples in accordance with the description. However, the description is not limited to the examples provided in the drawings.
[0012] FIG. 1 is a thread diagram illustrating an example of accessing variables in accordance with some examples of the techniques described herein. FIG. 1 illustrates examples of a BIOS 101 , a host memory 103, a controller 105, and a storage device 107. In some examples, the host memory 103, the controller 105, and the storage device 107 may be respective examples of the memory 204, the controller 206, and the storage device 208 described in FIG. 2. In some examples, portions of the electronic device 202 may be coupled via an interface (e.g., bus(es), wire(s), connector(s), etc.). As used herein, the term “couple” or “coupled” may denote a direct connection (without an intervening component) or an indirect connection (with an intervening component(s)). In some examples, the BIOS 101 and the controller 105 may be coupled to the host memory 103 via a bus. In some examples, the controller 105 may be coupled to the storage device 107 via an interface (e.g., inter integrated circuit (I2C) bus, I3C bus, universal serial bus (USB) interface, serial peripheral interface (SPI), or a combination thereof. In some examples, the BIOS 101 , host memory 103, controller 105, and storage device 107 may be components of an apparatus, electronic device (e.g., electronic device 202), or computing device (e.g., computing device 338).
[0013] As used herein, a basic input/output system (BIOS) refers to hardware or hardware and instructions to initialize, control, or operate a device (e.g., computing device 338, electronic device 202, etc.) prior to execution of an operating system (OS) of the device. Instructions included within a BIOS may be software, firmware, microcode, or other programming that defines or controls functionality or operation of a BIOS. In one example, a BIOS may be implemented using instructions, such as platform firmware of a device, executable by a processor. A BIOS may operate or execute prior to the execution of the OS of a device. A BIOS may initialize, control, or operate components such as hardware components of a device and may load or boot the OS of a device.
[0014] In some examples, a BIOS may provide or establish an interface between hardware devices or platform firmware of the device and an OS of the device, via which the OS of the device may control or operate hardware devices or platform firmware of the device. In some examples, a BIOS may implement the UEFI specification or another specification or standard for initializing, controlling, or operating a device. In some examples, a “BIOS” (e.g., BIOS 101 , BIOS 336, etc.) may refer to a processor (e.g., host central processing unit (CPU)) to execute instructions to perform a BIOS operation. In some examples, a host CPU is a largest processor, a processor capable of performing a largest quantity of logic operations (e.g., greatest operation throughput), or a combination thereof on an electronic device (e.g., computing device).
[0015] The host memory 103 is an electronic, magnetic, optical, other physical storage device, or a combination thereof that contains or stores electronic data (e.g., information, instructions, or a combination thereof). The host memory 103 may be, for example, Random Access Memory (RAM), Electrically Erasable Programmable Read-Only Memory (EEPROM), a storage device, an optical disc, the like, or a combination thereof. In some examples, the host memory 103 may be volatile or non-volatile memory, such as Dynamic Random Access Memory (DRAM), EEPROM, magnetoresistive random-access memory (MRAM), phase change RAM (PCRAM), Synchronous Dynamic Random Access Memory (SDRAM), Double Data Rate (DDR) RAM, memristor, flash memory, the like, or a combination thereof. In some examples, the host memory 103 may be a non-transitory tangible machine-readable storage medium, where the term “non-transitory” does not encompass transitory propagating signals. In some examples, the host memory 103 may include multiple devices (e.g., a RAM card and a solid-state drive (SSD)). In some examples, the host memory 103 may be associated with a host CPU of an electronic device. In some examples, the host memory 103 may have a largest volatile storage capacity of memory devices of an electronic device (e.g., computing device). In some examples, the host memory 103 may be host RAM of an electronic device. In some examples, the host memory 103 may be coupled to a motherboard of an electronic device (via RAM slot(s), for instance). [0016] FIG. 1 illustrates an example of an initialization operation 109. At 113, the BIOS 101 may allocate a buffer in host memory 103. A buffer is a portion of memory. In some examples, the buffer is a UEFI variable buffer. In some examples, the BIOS 101 may allocate the buffer when the host memory 103 is initialized (in a boot procedure, for instance). In some examples, the BIOS 101 may allocate the buffer by writing a data structure to the host memory 103, by reserving a portion of the host memory 103 for the buffer, or a combination thereof.
[0017] At 115, the BIOS 101 sends a buffer address to the controller 105. For instance, the BIOS 101 may send information (e.g., pointer, memory offset, index, etc.) indicating an address of the buffer in the host memory 103 to the controller 105. The controller 105 may be a logic circuit, processor, embedded controller, etc. For instance, the controller 105 may control communication between components of the electronic device. In some examples, the controller 105 may utilize the address of the buffer in the host memory 103 to read data from the buffer, to write data to the buffer, or a combination thereof. In some examples, the controller 105 is separate from a CPU or is not a CPU. In some examples, the controller 105 may send an initialization command to the controller 105. The initialization command may instruct the controller 105 to read a variable store from the storage device 107 and load the variable store to the host memory 103. A variable store is data indicating a variable or variables (e.g., UEFI variable(s)). Some examples of UEFI variables used for a UEFI boot manager may include: Boot#### (where “####” is a hexadecimal value, for instance), BootOrder (an ordered boot option load list, for instance), BootNext (a boot option for a next boot, for instance), and BootCurrent (a boot option selected for a current boot, for instance). PlatformLang is another example of a UEFI variable that indicates a set language for a device, to which a program or application may refer to set a default language.
[0018] At 117, the controller 105 reads the variable store from the storage device 107. For example, the storage device 107 may include a UEFI variable store. In some examples, the variable store may be sorted based on an identifier. An identifier is information that identifies a variable. For instance, an identifier may be a globally unique identifier (GUID), a name, or a combination of both. In some examples, the variable store (e.g., the variables in the variable store) may be sorted (e.g., ordered) in an order of the identifier (e.g., ascending GUID order, descending GUID order, alphabetical name order, reverse alphabetical name order, etc.). [0019] At 119, the controller 105 loads a variable to the host memory 103. For instance, the controller 105 may load a UEFI variable from the storage device 107 to the buffer in the host memory 103. In some examples, the controller 105 may load the variable to the host memory 103 via direct memory access. For instance, the controller 105 may load the variable(s) from the storage device 107 to the host memory 103 independently of a host CPU (e.g., without host CPU intervention). In some examples, loading the variable(s) may include copying the variable store from the storage device 107 to the host memory 103. For instance, the controller 105 may execute a command(s) to read data from the storage device 107 and to write the data to the host memory 103.
[0020] In some examples, an SMM (e.g., single-thread execution mode) may be enabled. When SMM is enabled, the BIOS 101 may allocate a second buffer in SMM of the host memory 103. For instance, the BIOS 101 may allocate a second buffer in a portion of the host memory 103 reserved for SMM. For instance, the BIOS 101 may copy the buffer (e.g., UEFI variable buffer) from UEFI reserved memory to SMM memory.
[0021] FIG. 1 illustrates an example of a get variable operation 135. At 121 , the BIOS 101 compares a variable identifier. For instance, the BIOS 101 may compare a given variable identifier (e.g., GUID, name, or a combination of both) with a variable identifier in the host memory 103. In some examples, the BIOS 101 may compare a given variable identifier with a central list variable identifier. A central list variable identifier is a variable identifier at a middle of sorted list of variable identifiers. For instance, the BIOS 101 may compare the given variable identifier with a variable’ GUID and name starting from a middle of a variable list. In response to determining that the variable identifier does not match the central list variable identifier. For instance, based on the comparison result (if not equal or if the variable list has more than one variable, for example), the BIOS 101 may adjust the variable list to be either the first half of the list (e.g., first sublist) or the second half (e.g., second sublist). The BIOS 101 may search from the middle of the sublist and so on. If the variable is found (e.g., the given identifier is equal to the identifier of the variable being compared), the BIOS 101 may return the variable. If the variable is not found, the BIOS 101 may return an error.
[0022] FIG. 1 illustrates an example of a set variable operation 137. At 123, the BIOS 101 copies a table in the host memory 103. For instance, the variable store in the host memory 103 may include a directory table. An example of a directory table is given in FIG. 5. For instance, the BIOS 101 may copy an active directory table to a backup directory table in the host memory 103.
[0023] At 125, the BIOS 101 locates a target variable in the host memory 103 (e.g., active directory table). For instance, based on the identifier (e.g., GUID and name), the BIOS 101 may locate the variable to be deleted or updated. In the case of a variable addition (e.g., insertion), the BIOS 101 may locate the variable with an identifier that is greater than the new variable and a neighboring variable with an identifier that is smaller than the identifier of the new variable.
[0024] At 127, the BIOS 101 updates the target variable. For instance, the BIOS 101 may write data to the target variable or a new variable. In some examples, the BIOS 101 may allocate a block and fill the block with a variable header and variable body. In some examples, the BIOS 101 may update a block status table. An example of a block status table is given in FIG. 5. In some examples, the BIOS 101 may update a directory header. For instance, the directory header may be updated such that the updated variable (e.g., new variable, changed variable, etc.) is at a location indicated by a variable entry list, and may be updated such that a variable total indicates the quantity of variables. An example of a directory header is given in FIG. 5. In some examples, the BIOS 101 may update a block with a directory status in a directory table (e.g., the active directory table). In some examples, for a changed block, including the variable, block status table, and directory table, the BIOS 101 may calculate a hash-based message authentication code (HMAC). In some examples, the BIOS 101 may apply and fill a circular buffer. A block with a directory status may be a last block to be processed. [0025] At 129, the BIOS 101 sends a command to the controller 105. The command may instruct the controller 105 to read a circular buffer(s) and write the data to the storage device 107.
[0026] At 131 , the controller 105 reads the circular buffer from the host memory 103. At 133, the controller 105 may write the target variable (or the variable store) to the storage device 107. For instance, the controller 105 may read a circular buffer in the host memory 103 and write the target variable to the storage device 107. In some examples, the controller 105 may read a circular buffer(s) via direct memory access and write to the storage device 107 accordingly. FIG. 1 provides examples of accessing variables in accordance with some of the techniques described herein.
[0027] FIG. 2 is a block diagram illustrating an example of an electronic device 202 that may be used to store variables. Examples of the electronic device 202 may include a computer (e.g., desktop computer, laptop computer, etc.), a smartphone, a tablet computer, a game console, etc. The electronic device 202 may include a memory 204, controller 206, and a storage device 208. In some examples, the electronic device 202 may include a CPU. The CPU may be a processor to perform an operation on the electronic device 202. Examples of the CPU may include a general-purpose processor, a microprocessor, etc. In some examples, the CPU may be an application processor. In some examples, the CPU may execute instructions (e.g., an application) on the electronic device 202.
[0028] The memory 204 is an electronic, magnetic, optical, other physical storage device, or a combination thereof that contains or stores electronic data (e.g., information and instructions). The memory 204 may be, for example, RAM, EEPROM, a storage device, an optical disc, the like, or a combination thereof. In some examples, the memory 204 may be volatile or non-volatile memory, such as DRAM, EEPROM, MRAM, PCRAM, SDRAM, DDR RAM, memristor, flash memory, the like, or a combination thereof. In some examples, the memory 204 may be a non-transitory tangible machine-readable storage medium. In some examples, the memory 204 may include multiple devices (e.g., a RAM card and an SSD). In some examples, the memory 204 may be associated with a CPU of the electronic device 202. For instance, the memory 204 may store instructions for execution by the CPU. In some examples, the memory 204 may be separate from the storage device 208. In some examples, the memory 204 may have a larger storage capacity than the storage device 208. In some examples, the memory 204 may be host RAM of the electronic device 202. In some examples, the memory 204 may be coupled to a motherboard of the electronic device 202 (via RAM slot(s), for instance).
[0029] The controller 206 may be a logic circuit. For instance, the controller 206 may be a logic circuit capable of performing logical operations. Examples of the controller 206 may include a processor, field-programmable gate array (FPGA), application-specific integrated circuit (ASIC), controller, engine, etc. For instance, the controller 206 may be an embedded controller. In some examples, the controller 206 may be attached (e.g., soldered) to a motherboard of the electronic device 202.
[0030] The storage device 208 is non-volatile memory circuitry. For example, the storage device 208 may be an embedded multimediacard (eMMC) storage device, a nonvolatile memory express (NVMe) storage device, or a universal serial bus (USB) storage device. In some examples, the storage device 208 may be attached (e.g., soldered) to a motherboard of the electronic device 202. In some examples, the storage device 208 may be separate from a host hard drive of the electronic device 202.
[0031] The controller 206 may be coupled to the memory 204 and to the flash memory. For instance, the controller 206 may be coupled to the memory 204 with an interface, wire, bus, or a combination thereof. In some examples, the coupling between the controller 206 and the memory 204 may provide direct memory access to the memory 204. In some examples, the controller 206 may be coupled to the storage device 208 by an I3C bus, a USB interface, a SPI bus (e.g., enhanced SPI (eSPI) bus), or a combination thereof. For instance, the electronic device 202 may include an I3C bus, USB interface, SPI bus, or a combination thereof, where the controller 206 may read the storage device 208, may access the storage device 208, or may perform a combination thereof. [0032] In some examples, the storage device 208 includes a UEFI variable store that is sorted based on an identifier. In some examples, the identifier includes a GUID, a variable name, or a combination thereof. For instance, the storage device 208 may include UEFI variables that are ordered based on a GUID, a name, or a combination thereof (e.g., a number(s), string(s), alphanumeric characters, etc.). In some examples, variables may be sorted based on the identifier (e.g., GUID and name) in memory 204, in the storage device 208, or in a combination thereof. In some examples, a copy of each variable may be stored.
[0033] In some examples, the storage device 208 may be a sector-based storage device (e.g., eMMC, NVMe, or USB accessible storage). In some examples, the storage device 208 is not flash storage or excludes flash storage. In some examples, the storage device 208 may be a relatively high-speed storage device.
[0034] In some examples, the memory 204 includes a buffer. For instance, a buffer(s) may be allocated in the memory 204 to store the variable(s) (e.g., UEFI variable(s)) from the storage device 208. In some examples, the electronic device 202 includes a BIOS (not shown in FIG. 2) to allocate the buffer in the memory 204. For instance, the buffer(s) may be initialized (e.g., initially written) by a BIOS of the electronic device 202. In some examples, the buffer(s) may be stored in reserved memory (e.g., UEFI reserved memory). Reserved memory is a portion of memory 204. For instance, reserved memory may be a portion of the memory 204 reserved for use by a BIOS.
[0035] In some examples, the controller 206 may load a UEFI variable from the storage device 208 to the buffer in the memory 204 via direct memory access. For instance, some examples of the techniques described herein may provide approaches to manage a UEFI variable(s). For instance, the storage device 208 may be connected to the controller 206 (e.g., embedded controller). The controller 206 may be direct memory access capable and may transfer UEFI variables to the memory 204 from the storage device 208, from the storage device 208 to the memory 204, or a combination thereof. [0036] In some examples, the buffer is included in SMM memory (in the memory 204, for instance) when SMM is enabled. In some examples, the memory 204 may include a circular buffer. For instance, during POST and at runtime, there may be two buffers in the memory 204. In some examples, the first buffer may include UEFI variables (e.g., all UEFI variables). In some examples, the first buffer may be stored in SMM memory when SMM is enabled. In some examples, the second buffer may be stored in UEFI reserved memory. In some examples, the second buffer may be a circular buffer. In some examples, the circular buffer may communicate an update to the controller 206. For instance, the circular buffer may be utilized for a UEFI variable service to communicate any variable update to the controller 206.
[0037] In some examples, the variable store occupies a continuous region in the storage device 208. In some examples, the variable store occupies a continuous region in the memory 204. For instance, the variable store may be stored in a continuous region in the memory 204, may be stored in a continuous region in the storage device 208, or in a combination thereof. In some examples, the variable store may be managed as a continuous region (e.g., continuous address range).
[0038] In some examples, the variable store may include an active directory table and a backup directory table. For instance, there may be two copies of a directory table. At a given time, one directory table may be an active directory table and the other directory table may be a backup directory table (or working area, for example). A directory table may include a set (e.g., list) of ordered entries. An entry may correspond to a variable, where an entry may include a pointer to an initial block and a status for a block. During a variable change operation (e.g., update, addition, deletion, etc.) blocks for variable data may be allocated or freed (and potentially updated, for instance). In some examples, the backup directory table may be updated with the block status and new order of variables. Some examples of the techniques described herein may include flipping the status of a directory table from backup to active.
[0039] In some examples, the electronic device 202 may perform one, some, or all of the aspects, operations, elements, etc., described in one, some, or all of FIG. 1-6. In some examples, the electronic device 202 may include an element described in one, some, or all of FIG. 1-6.
[0040] FIG. 3 is a block diagram illustrating an example of a computing device 338 to manage variable accesses. In some examples, the computing device 338 may perform the operations described in FIG. 1 , FIG. 2, FIG. 4, FIG. 5, FIG. 6, or a combination thereof. The computing device 338 may be an example of the electronic device 202 described in FIG. 2. In some examples, the computing device 338 may include a host memory 324, a storage device 368, a BIOS 336, a controller 366, or a combination thereof. In some examples, the computing device 338 may include a host CPU. For instance, the BIOS 336 may be a host CPU to execute an instruction to perform a BIOS operation.
[0041] Examples of the computing device 338 may include a computing device, smartphone, laptop computer, tablet device, mobile device, etc. In some examples, one, some, or all of the components of the computing device 338 may be structured in hardware (e.g., circuitry). In some examples, the components described in FIG. 3 may be examples of corresponding components described in FIG. 1 , FIG. 2, or a combination thereof. In some examples, the computing device 338 may perform one, some, or all of the operations described in FIG. 1-6.
[0042] In some examples, the BIOS 336 may allocate a first buffer 346 in the host memory 324. For instance, the BIOS 336 may allocate the first buffer 346 in reserved memory 344 (e.g., UEFI reserved memory) of the host memory 324. In some examples, the BIOS 336 may send an initialization command to the controller 366 with a buffer address (e.g., an address of the first buffer 346). For instance, the BIOS 336 may send an address indication to the controller 366. For example, the BIOS 336 may send an address of the first buffer 346 in the host memory 324 to the controller 366. In some examples, the BIOS 336 may send the address indicator when the BIOS 336 allocates the first buffer 346 or after the BIOS 336 completes allocating the first buffer 346 (e.g., after boot).
[0043] In some examples, the controller 366 may read a UEFI variable from the storage device 368. For instance, during an initialization operation, the controller 366 may read a UEFI variable (e.g., variable store) from the storage device 368. In some examples, the controller 366 may read the UEFI variable from the storage device 368 via a I3C interface, USB interface, SPI, or a combination thereof. In some examples, the controller 366 may store the UEFI variable in the first buffer 346 in the host memory 324 via direct memory access. For instance, the controller 366 may load the UEFI variable to the first buffer 346 over an interface that supports direct memory access to the host memory 324 (e.g., access to the host memory 324 without host CPU intervention).
[0044] In some examples, the computing device 338 may perform a get variable operation. For instance, the computing device 338 may perform a get variable operation 135 as described in FIG. 1. In some examples, the BIOS 336 may compare a variable identifier with a central list variable identifier. The BIOS 336 may compare the variable identifier with a central sublist variable identifier in response to determining that the variable identifier does not match the central list variable identifier. For example, the get variable operation may utilize a search approach that searches from a middle variable in a sorted list of variables. If a variable identifier does not match the identifier of the middle variable, the BIOS 336 may determine whether the variable identifier is less than or greater than the identifier of the middle variable. In a case that the variable identifier is greater than the identifier of the middle variable, the upper sublist may be selected. In a case that the variable identifier is less than the identifier of the middle variable, the lower sublist may be selected. The identifier of the middle variable of the selected sublist may be compared to the variable identifier. This procedure may iterate until the variable is found or the remaining sublist is an empty set. The sorted nature of the variables may enable faster operations to find a variable (relative to unsorted structures of variables, for instance).
[0045] In some examples, the computing device 338 may perform a set variable operation. For instance, the computing device 338 may perform a set variable operation 137 as described in FIG. 1. In some examples, the BIOS 336 may copy an active directory table to a backup directory table in the host memory 324. For instance, the BIOS 336 may copy an active directory table to a backup directory table in the first buffer 346 (e.g., variable store of the first buffer 346) in the host memory 324. In some examples, the BIOS 336 may locate a target variable in the active directory table. For instance, the BIOS 336 may utilize a search procedure similar to that utilized in the get variable operation. In some examples, the BIOS 336 may update the target variable. For instance, the BIOS 336 may write data to the target variable, may delete the target variable, or may add a new target variable (in a case that the target variable was not located, for example). In some examples, the BIOS 336 may send a command to the controller 366. The controller 366 may read a circular buffer 348 in the host memory 324 and may write the target variable to the storage device 368. For instance, the circular buffer 348 may be allocated in reserved memory 344 in the host memory 324. In some examples, the controller 366 may read the circular buffer 348 via direct memory access and may update the storage device 368 using the data read from the circular buffer 348.
[0046] In some examples, the host memory 324 may include SMM memory 350. The SMM memory 350 may include a second buffer 352. In some examples, the second buffer 352 may be allocated for use in SMM. For instance, when SMM is enabled, the second buffer 352 may be allocated in the SMM memory 350, and the first buffer 346 (e.g., UEFI variable buffer) may be copied from the reserved memory 344 to the SMM memory 350.
[0047] FIG. 4 is a block diagram illustrating an example of a computer- readable medium 480 for managing variable accesses. The computer-readable medium 480 is a non-transitory, tangible computer-readable medium. In some examples, the computer-readable medium 480 may be, for example, RAM, DRAM, EEPROM, MRAM, PCRAM, a storage device, an optical disc, the like, or a combination thereof. In some examples, the computer-readable medium 480 may be volatile memory, non-volatile memory, or a combination thereof. In some examples, the computer-readable medium 480 described in FIG. 4 may be an example of memory including instructions to be executed by a circuitry (e.g., logic circuit, processor, controller, engine, etc.) to access a variable. For instance, the computer-readable medium 480 may be an example of memory (e.g., embedded memory) of a controller. [0048] The computer-readable medium 480 may include data (e.g., information, instructions). In the example of FIG. 4, the computer-readable medium 480 includes reading instructions 482 and storage instructions 484.
[0049] The reading instructions 482 may include instructions when executed cause a processor (e.g., controller) of an electronic device to read, from a storage device, a UEFI variable store that is sorted based on an identifier. In some examples, reading the UEFI variable store may be performed as described in FIG. 1 , FIG. 2, FIG. 3, FIG. 5, or a combination thereof.
[0050] The storage instructions 484 may include instructions when executed cause the processor (e.g., controller) to store, in host memory via direct memory access, the UEFI variable store. The UEFI variable store may include a first directory table including a first status indicator, a second directory table indicating a second status indicator, and a plurality of blocks. In some examples, storing the UEFI variable store may be performed as described in FIG. 1 , FIG. 2, FIG. 3, FIG. 5, or a combination thereof.
[0051] In some examples, the first directory table includes a block pointer indicating a location of an initial block of a UEFI variable. An example of a first directory table is given in FIG. 5.
[0052] In some examples, the host memory 324 includes a circular buffer 348 read by a controller to update the UEFI variable store in the storage device 368. An example of a circular buffer is given in FIG. 6.
[0053] FIG. 5 is a flow diagram illustrating an example of a variable store 586 in accordance with some examples of the techniques described herein. The variable store 586 is a data structure to store a variable or variables. For instance, the variable store 586 may be stored in a storage device, in a host memory 324, or a combination thereof. In some examples, the variable store 586 may include 2 megabytes (MB) of data.
[0054] In some examples, the variable store 586 may include a first directory table 588, a second directory table 590, and blocks 592. The first directory table 588 may include a directory header 594 and a block status table 541. The directory header 594 may include a status 596, a variable total 598, and entries 539. The status 596 may be data indicating whether the first directory table 588 has an active or backup status. The variable total 598 may indicate a quantity of variables stored in the variable store 586. The entries 539 may be data, where an entry indicates a pointer to an initial block corresponding to a variable.
[0055] In some examples, the directory header 594 may be 2 kilobytes (kB) of data, the status 596 may be 2 bytes of data, the variable total 598 may be 2 bytes of data, and each of the entries 539 may be 2 bytes of data. In some examples, there may be 1023 entries 539.
[0056] In some examples, the block status table 541 may indicate a status for each of the blocks 592. For instance, the block status table 541 may include a block status for each of the blocks 592, where each block status indicates whether a block is occupied or available (for writing new data or a variable, for example). In some examples, a block status may be a flag or flags to indicate whether new data may be written to the block or whether the block is occupied with current variable data. In some examples, the size of the block status table 541 may be determined by a quantity of blocks 592. In some examples, the second directory table 590 may include data similar to the first directory table 588. In some examples, the first directory table 588 may be 4 kB of data and the second directory table 590 may be 4 kB of data.
[0057] The blocks 592 may be blocks of data. For example, a block may be allocated 128 bytes of data. A variable 543 may be stored in one block or across multiple blocks.
[0058] In some examples, a variable 543 may include a variable header 545 and a variable body 551 . The variable header 545 may include a block total 547 and block pointers 549. In some examples, the block total 547 may be represented by 1 byte of data. The block total 547 may indicate a quantity of blocks (of the blocks 592) occupied by the variable 543. In some examples, a block pointer may include 2 bytes of data. The block pointers 549 may point to a set of the blocks 592 occupied by the variable 543. For example, a variable 543 may be stored in one block or multiple blocks (of blocks 592). In a case of multiple blocks, a block pointer may point to a next block. In some examples, a block pointer may include two fields if the variable body 551 extends past a boundary that divides the data. [0059] FIG. 6 is a diagram illustrating an example of a circular buffer 663 that may be utilized in accordance with some examples of the techniques described herein. In some examples, multiple circular buffers may be utilized. A circular buffer (e.g., ring buffer) is a buffer with a contiguous or circular memory characteristic. With a circular buffer, for instance, as data in memory is generated and consumed, data in the circular buffer may avoid reshuffling by adjusting a head pointer, a tail pointer, or a combination of both. When data is added, for instance, the head pointer may advance. In some examples, a circular buffer may provide a first-come-first-serve processing order. In some examples, the circular buffer 663 may include 256 bytes of data. In some examples, the circular buffer 663 may include a buffer header 665 and a buffer body 669. In some examples, the buffer body 669 may include 128 bytes of data. The buffer header 665 may include an HMAC 667. In some examples, a circular buffer includes a block that is similar to (e.g., the same as) a block in the variable store and a buffer header 665 with a HMAC 667 to protect the block from attack. A HMAC is a message authentication code (MAC) acquired by executing a cryptographic hash function on data to be authenticated and a shared key. In some examples, a UEFI BIOS generates the shared key early in a POST procedure and sends the shared key to a controller (e.g., embedded controller). With the shared key, the BIOS may calculate the hash of the buffer and store the hash (e.g., HMAC) in a header (e.g., buffer header 665). In some examples, the controller may use the shared key to verify the hash against a circular buffer to ensure data integrity and authentication.
[0060] In some cases, multiple circular buffers may be utilized. A variable with multiple blocks may have a same quantity of circular buffer blocks in a sequential order. For instance, sequential order may be utilized instead of a random order in a variable store of some approaches. In some examples, a controller (e.g., embedded controller) may access a circular buffer status information structure and process one variable update at a time. For example, a controller may use a location indicated by a buffer start index (e.g., an “in-use buffer start index”) to pick up a circular buffer for a variable update, where an initial block indicates a quantity of blocks for the controller to access in sequential order for the variable update. After verifying the HMAC in each circular buffer header, the controller may construct the variable and update the storage device. After the update is completed, the controller may move the buffer start index (e.g., “in-use buffer start index”).
[0061] In some examples, a circular buffer status 653 may be utilized (e.g., stored in memory or storage). The circular buffer status 653 may be data indicating a status of the circular buffer 663. In some examples, the circular buffer status 653 includes a circular buffer address 655, a circular buffer length 657, a buffer start index 659, and a buffer end index 661. In some examples, a circular buffer(s) within a range of the buffer start index 659 (e.g., in-use buffer start index) and the buffer end index 661 (e.g., in-use buffer end index) may be in-use or occupied. A circular buffer(s) outside of the range may be available or free.
[0062] As used herein, items described with the term “or a combination thereof” may mean an item or items. For example, the phrase “A, B, C, or a combination thereof” may mean any of: A (without B and C), B (without A and C), C (without A and B), A and B (but not C), B and C (but not A), A and C (but not B), or all of A, B, and C.
[0063] While various examples are described herein, the disclosure is not limited to the examples. Variations of the examples described herein may be within the scope of the disclosure. For example, operation(s), function(s), aspect(s), or element(s) of the examples described herein may be omitted or combined.

Claims

1 . An electronic device, comprising: a storage device including a unified extensible firmware interface (UEFI) variable store that is sorted based on an identifier; a memory including a buffer; and a controller coupled to the storage device and to the memory, wherein the controller is to load a UEFI variable from the storage device to the buffer in the memory via direct memory access.
2. The electronic device of claim 1 , wherein the buffer is included in system management mode (SMM) memory when SMM is enabled.
3. The electronic device of claim 1 , wherein the memory includes a circular buffer.
4. The electronic device of claim 3, wherein the circular buffer is to communicate an update to the controller.
5. The electronic device of claim 1 , wherein the identifier comprises a globally unique identifier (GUID).
6. The electronic device of claim 1 , wherein the identifier comprises a variable name.
7. The electronic device of claim 1 , wherein the variable store occupies a continuous region in the storage device.
8. The electronic device of claim 1 , wherein the variable store comprises an active directory table and a backup directory table.
9. The electronic device of claim 1 , wherein the storage device is an embedded multimediacard (eMMC) storage device, a nonvolatile memory express (NVMe) storage device, or a universal serial bus (USB) storage device.
10. A computing device, comprising: a host memory; a basic input/output system (BIOS) to: allocate a buffer in the host memory; and send an initialization command to a controller with a buffer address; a storage device; and the controller to: read a unified extensible firmware interface (UEFI) variable from the storage device; and store the UEFI variable in the buffer in the host memory via direct memory access.
11 . The computing device of claim 10, wherein the BIOS is to: compare a variable identifier with a central list variable identifier; and compare the variable identifier with a central sublist variable identifier in response to determining that the variable identifier does not match the central list variable identifier.
12. The computing device of claim 10, wherein the BIOS is to: copy an active directory table to a backup directory table in the host memory; locate a target variable in the active directory table; update the target variable; and send a command to the controller, wherein the controller is to read a circular buffer in the host memory and write the target variable to the storage device.
13. A non-transitory tangible computer-readable medium comprising instructions when executed cause a processor of an electronic device to: read, from a storage device, a unified extensible firmware interface (IIEFI) variable store that is sorted based on an identifier; and store, in host memory via direct memory access, the UEFI variable store, wherein the UEFI variable store comprises a first directory table including a first status indicator, a second directory table indicating a second status indicator, and a plurality of blocks.
14. The non-transitory tangible computer-readable medium of claim 13, wherein the first directory table comprises a block pointer indicating a location of an initial block of a UEFI variable.
15. The non-transitory tangible computer-readable medium of claim 14, wherein the host memory comprises a circular buffer read by a controller to update the UEFI variable store in the storage device.
PCT/US2022/012439 2022-01-14 2022-01-14 Variable memories WO2023136830A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/US2022/012439 WO2023136830A1 (en) 2022-01-14 2022-01-14 Variable memories

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2022/012439 WO2023136830A1 (en) 2022-01-14 2022-01-14 Variable memories

Publications (1)

Publication Number Publication Date
WO2023136830A1 true WO2023136830A1 (en) 2023-07-20

Family

ID=87279555

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2022/012439 WO2023136830A1 (en) 2022-01-14 2022-01-14 Variable memories

Country Status (1)

Country Link
WO (1) WO2023136830A1 (en)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100017796A1 (en) * 2008-07-16 2010-01-21 Dell Products, Lp Input/output transaction management during platform initiation
US9189248B2 (en) * 2013-04-25 2015-11-17 Insyde Software Corp. Specialized boot path for speeding up resume from sleep state
US20150363323A1 (en) * 2013-01-30 2015-12-17 Xinlai Yu Non-volatile memory write mechanism
US20160140007A1 (en) * 2014-11-18 2016-05-19 Samsung Electronics Co., Ltd. Storage device and operating method of the same
US10491736B2 (en) * 2017-08-28 2019-11-26 American Megatrends International, Llc Computer system and method thereof for bluetooth data sharing between UEFI firmware and OS
US20200073676A1 (en) * 2018-08-30 2020-03-05 Dell Products, Lp Method and Apparatus for UEFI Firmware Boot Journal Recording

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100017796A1 (en) * 2008-07-16 2010-01-21 Dell Products, Lp Input/output transaction management during platform initiation
US20150363323A1 (en) * 2013-01-30 2015-12-17 Xinlai Yu Non-volatile memory write mechanism
US9189248B2 (en) * 2013-04-25 2015-11-17 Insyde Software Corp. Specialized boot path for speeding up resume from sleep state
US20160140007A1 (en) * 2014-11-18 2016-05-19 Samsung Electronics Co., Ltd. Storage device and operating method of the same
US10491736B2 (en) * 2017-08-28 2019-11-26 American Megatrends International, Llc Computer system and method thereof for bluetooth data sharing between UEFI firmware and OS
US20200073676A1 (en) * 2018-08-30 2020-03-05 Dell Products, Lp Method and Apparatus for UEFI Firmware Boot Journal Recording

Similar Documents

Publication Publication Date Title
US10983955B2 (en) Data unit cloning in memory-based file systems
JP5636034B2 (en) Mediation of mount times for data usage
US8010740B2 (en) Optimizing memory operations in an electronic storage device
KR102275563B1 (en) Host-managed non-volatile memory
JP2018073040A (en) Memory system
US10936203B2 (en) Memory storage device and system employing nonvolatile read/write buffers
JP2013137770A (en) Lba bitmap usage
US11249911B2 (en) Storage device, memory system, and operating method for managing host-resident L2P map cache
JPH08328762A (en) Semiconductor disk device and memory management method therefor
US20200097367A1 (en) Storage device and operating method of storage device
US11194711B2 (en) Storage device
CN112988616A (en) Reading sequential data from memory using hub table
TWI710905B (en) Data storage device and method for loading logical-to-physical mapping table
US10146440B2 (en) Apparatus, system and method for offloading collision check operations in a storage device
US11645007B2 (en) Memory device including plurality of buffer areas for supporting fast write and fast read and storage device including the same
US20150220452A1 (en) System, Method and Computer-Readable Medium for Dynamically Mapping a Non-Volatile Memory Store
KR20140147017A (en) System and method for recovering from an unexpected shutdown in a write-back caching environment
US11507312B2 (en) Storage device and method for accelerating storage device write and read speed
US20230072721A1 (en) Storage device and operating method of storage device
CN111813703A (en) Data storage device and method for updating logical-to-physical address mapping table
US11556464B2 (en) Storage device and operating method thereof
US11573732B2 (en) Storage device, memory system comprising the same, and operation method thereof
US11507311B2 (en) Storage device for accelerating write speed and read speed
US10365857B2 (en) Memory system
WO2023136830A1 (en) Variable memories

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 22920902

Country of ref document: EP

Kind code of ref document: A1