|
| 1 | +# Design Problem Specification |
| 2 | + |
| 3 | +**Preface:** |
| 4 | +The problem statement is to provide: |
| 5 | +1. Controlling a conventional I/O interface over another I/O interface; commonly known as **"I/O Emulation"**. |
| 6 | +2. Writing Serial and Parallel programming interfaces for Embedded Bare-Metal MCU over the Super I/O Chips controllers. (Deferred for later revisit). |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## Table of Contents |
| 11 | +1. Design Problem Specification |
| 12 | + * 1.1 Functional Problem Bulk |
| 13 | + * 1.2 Functional Problems Decomposition |
| 14 | + * 1.3 Non-functional Problems |
| 15 | + * 1.4 Problem-Problems Relationship |
| 16 | +2. Design Implications |
| 17 | + * 2.1 Modus Ponens |
| 18 | + * 2.2 Modus Tollens |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## 1) Design Problem Specification: |
| 23 | + |
| 24 | +### Section 1.1: Functional Problem Bulk |
| 25 | + |
| 26 | +Functional problem formula: |
| 27 | + |
| 28 | +$$ |
| 29 | +P_{functional} = \{ P_{I/O\ Emulation\ of\ IO-2\ interface\ over\ I/O-1\ interface},\ |
| 30 | +P_{Compatible\ I/O\ architectures} \} |
| 31 | +$$ |
| 32 | + |
| 33 | +> [!NOTE] |
| 34 | +> * $P_{Compatible\ I/O\ architectures}$: is defined as a functional problem that arises as a result of various manufacturers for the same category of devices (e.g., Super I/O Chips), and even the variations across the same device family. |
| 35 | +
|
| 36 | +--- |
| 37 | + |
| 38 | +### Section 1.2: Functional Problems Decomposition |
| 39 | + |
| 40 | +This section attempts to further break the large bulk of problems into manageable sub-problems. |
| 41 | +The final sub-problems set is a subset of the original bulk set presented in **Section 1.1**. |
| 42 | + |
| 43 | +Functional problems decomposition formula: |
| 44 | + |
| 45 | +$$ |
| 46 | +P_{functional} = \{ P_{I/O\ Emulator\ Interface},\ |
| 47 | +P_{I/O\ Emulated\ Interface},\ |
| 48 | +P_{Emulation\ Kernel\ Engine},\ |
| 49 | +P_{Emulation\ User\ Engine} \} |
| 50 | +$$ |
| 51 | + |
| 52 | +> [!NOTE] |
| 53 | +> * $P_{I/O\ Emulator\ Interface}$: is defined as the hardware-software interface through which the emulation is facilitated. It could be an input or an output interface; being an **Emulator** interface denotes that it sends the emulation commands to the emulation engine components to emulate another I/O interface. |
| 54 | +> * $P_{I/O\ Emulated\ Interface}$: is defined as the hardware-software interface which is emulated by the emulation engine. It could be an input or an output interface; being an **Emulated** interface denotes dependence on the **Emulation Engine** and compatibility upon the **Emulator** interface, as the **emulated** interface receives input from the **Emulation Engine**. |
| 55 | +
|
| 56 | +--- |
| 57 | + |
| 58 | +### Section 1.3: Non-functional Problems |
| 59 | + |
| 60 | +This section extracts the part that examines non-functional requirements. |
| 61 | +These parts of the problem are not playing an explicit role in the functional requirements scheme, but rather level up the safety, reliability, robustness, resilience, and security, contributing to the overall software performance. |
| 62 | + |
| 63 | +Non-functional problems formula: |
| 64 | + |
| 65 | +$$ |
| 66 | +P_{Non-functional} = \{ |
| 67 | +P_{I/O\ resources\ shared\ acquisition},\ |
| 68 | +P_{I/O\ Locked\ threaded\ init},\ |
| 69 | +P_{I/O\ Locked\ error\ handling},\ |
| 70 | +P_{I/O\ init\ fallback\ to\ compatible\ devices},\ |
| 71 | +P_{I/O\ R/W\ Clock\ Cycle},\ |
| 72 | +P_{Programmed\ threaded\ interrupted\ I/O},\ |
| 73 | +P_{I/O\ resources\ release},\ |
| 74 | +P_{I/O\ device\ de-init},\ |
| 75 | +P_{Linux\ VFS},\ |
| 76 | +P_{Emulation\ VM} \} |
| 77 | +$$ |
| 78 | + |
| 79 | +--- |
| 80 | + |
| 81 | +### Section 1.4: Problem-Problems Relationship |
| 82 | + |
| 83 | +Representing relationships among different problems is an essential task to understand the overall system behavior, and thus map the components to their problems later. Relationships can be represented using relations mapping; there is a bijective, injective, and surjective mappings. |
| 84 | + |
| 85 | +Functional and non-functional problems are closely related to one another; therefore the following relation mappings could be attained: |
| 86 | + |
| 87 | +* Let $M_{IO}(p)$ be a set of ordered pairs that maps a functional problem to other non-functional problems; such that $p$ is an input/output interface problem for a physical or virtual I/O device. |
| 88 | + |
| 89 | +$$ |
| 90 | +M_{IO}(p) = \{ |
| 91 | +(P_{p}, P_{I/O\ resources\ shared\ acquisition}),\ |
| 92 | +(P_{p}, P_{I/O\ Locked\ threaded\ init}),\ |
| 93 | +(P_{p}, P_{I/O\ Locked\ error\ handling}),\ |
| 94 | +(P_{p}, P_{I/O\ init\ fallback\ to\ compatible\ devices}),\ |
| 95 | +(P_{p}, P_{I/O\ R/W\ Clock\ Cycle}),\ |
| 96 | +(P_{p}, P_{Programmed\ threaded\ interrupted\ I/O}),\ |
| 97 | +(P_{p}, P_{I/O\ resources\ release}),\ |
| 98 | +(P_{p}, P_{I/O\ device\ de-init}),\ |
| 99 | +(P_{p}, P_{Linux\ VFS}),\ |
| 100 | +(P_{p}, P_{Emulation\ VM}) \} |
| 101 | +$$ |
| 102 | + |
| 103 | +* Let $M_{Engine}(p)$ be a set of ordered pairs that maps a functional problem to other non-functional problems; such that $p$ is an engine interface problem for providing the emulation of an I/O interface over the other; an engine could be a **user-space** engine or a **kernel-space** engine. |
| 104 | + |
| 105 | +$$ |
| 106 | +M_{Engine}(p) = \{ |
| 107 | +(P_{p}, P_{I/O\ R/W\ Clock\ Cycle}),\ |
| 108 | +(P_{p}, P_{Linux\ VFS}),\ |
| 109 | +(P_{p}, P_{Char/Block\ Devices}),\ |
| 110 | +(P_{p}, P_{Emulation\ VM}),\ |
| 111 | +(P_{p}, P_{I/O\ Operation\ Lifecycle}) \} |
| 112 | +$$ |
| 113 | + |
| 114 | + |
| 115 | +## 2) Design Implications: |
| 116 | + |
| 117 | +-- Deferred -- |
0 commit comments