瀏覽代碼

Progress on simu2 & simu3

Joshua Rutschmann 8 年之前
父節點
當前提交
ae282ae05e
共有 2 個檔案被更改,包括 58 行新增12 行删除
  1. 51
    10
      hw3/simu2/ANSWERS.md
  2. 7
    2
      hw3/simu3/ANSWERS.md

+ 51
- 10
hw3/simu2/ANSWERS.md 查看文件

@@ -2,20 +2,20 @@
2 2
 
3 3
 ### Warmup
4 4
 
5
-| VA Number | Virtual Adress | Binary Address | Segment Number |
6
-| --------- | -------------- | -------------- | -------------- |
7
-| VA  0     | 0x00000011     | 0**0**010001   | 0              |
8
-| VA  1     | 0x0000006c     | 0**1**101100   | 1              |
9
-| VA  2     | 0x00000061     | 0**1**100001   | 1              |
10
-| VA  3     | 0x00000020     | 0**0**100000   | 0              |
11
-| VA  4     | 0x0000003f     | 0**0**111111   | 0              |
5
+| VA Number | Virtual Adress     | Physical Adress         | Valid |
6
+| --------- | :----------------- | ----------------------- | ----- |
7
+| VA  0     | 0x11  --> 0010001  | **00**0010001 --> 0x11  | YES   |
8
+| VA  1     | 0x6c  --> 1101100  | **11**1101100 --> 0x1ec | YES   |
9
+| VA  2     | 0x61  --> 1100001  | **11**1100001 --> 0x1e1 | NO    |
10
+| VA  3     | 0x20  --> 0100000  | **00**100000 --> 0x1e1  | NO    |
11
+| VA  4     | 0x3f   --> 0111111 | **00**111111 --> 0x1e1  | NO    |
12 12
 
13 13
 
14 14
 
15 15
 ```
16 16
  --------------- 0x00000000
17 17
  |  Segment 0  |
18
- |-------------| 0x00000020
18
+ |-------------| 0x00000014
19 19
  |             |
20 20
  |             |
21 21
  |             |
@@ -29,5 +29,46 @@
29 29
 
30 30
 ## Questions
31 31
 
32
-1.  Die höchste erlaubte Adresse in Segment 0 ist 0x00000020. Die niedrigste valide Addresse des Segments 1 ist 0x000001ec.
33
-2.  ​
32
+1.  Die höchste erlaubte Adresse in Segment 0 ist 0x00000020. Die niedrigste valide Addresse des Segments 1 ist 0x000001ec. Um zu testen ob das stimmt kann mann alle validen  Adressen des ersten Segments UND Adressen über dem Limit 
33
+
34
+     `-A 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127`
35
+
36
+
37
+2.   Der Aufruf muss wie folgt aussehen:
38
+
39
+    > ./segmentation.py -a 16 -p 128 -A 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 **--b0 0 --l0 2 --b1 16 --l1 2** -c
40
+
41
+    Die Flags `-l0` und `-l1` setzten jeweils das Limit für das Segment auf 2:
42
+
43
+    ​	Segment 0 nimmt also die virtuellen Adressen 0 und 1 an und
44
+
45
+    ​	Segment 1 nimmt die Adressen 14 und 15 an
46
+
47
+3.   Man sollte das Limit `-l` so wählen, dass es 90% der Adressen des Adressraums `-a` abdeckt. Dann werden die restliche 10% über das gesetzte Limit gehen und einen Segmentation Fault auslösen.
48
+
49
+4.  Man setzt die Limits der Segmente auf 0, dann ist keine virtuelle Adresse valide.
50
+
51
+5.  `Segment 0: 0x0000 bis 0x0040`
52
+
53
+    `Segment 1: 0x0380 bis 0x0400`
54
+
55
+    | VA Nr. | Virtual Address | Physical Address HEX | PA DEC |
56
+    | ------ | --------------- | -------------------- | ------ |
57
+    | 0      | 0x0000005c      |                      |        |
58
+    | 1      | 0x00000011      |                      |        |
59
+    | 2      | 0x00000043      |                      |        |
60
+    | 3      | 0x00000021      |                      |        |
61
+    | 4      | 0x0000006c      |                      |        |
62
+    | 5      | 0x0000007a      |                      |        |
63
+    | 6      | 0x00000050      |                      |        |
64
+    | 7      | 0x00000037      |                      |        |
65
+    | 8      | 0x000000ff      |                      |        |
66
+    | 9      | 0x000000e9      |                      |        |
67
+    | 10     | 0x00000001      |                      |        |
68
+    | 11     | 0x0000014c      |                      |        |
69
+    | 12     | 0x000000b4      |                      |        |
70
+    | 13     | 0x000000cf      |                      |        |
71
+    | 14     | 0x0000012b      |                      |        |
72
+    | 15     | 0x00000084      |                      |        |
73
+
74
+    ​

+ 7
- 2
hw3/simu3/ANSWERS.md 查看文件

@@ -101,6 +101,11 @@ Wie man sieht hat die Fragmentierung des Speichers bzw. der Free-Liste zugenomme
101 101
 
102 102
 1. Wenn zwei mal ein gleich großes Speicherstück alloziiert wird, dann wird nicht das wieder freigewordene Fragment genutzt, sondern ein neues reserviert. Auch Alloziierungen von kleineren Stücken bekommen keine Teile von wieder freigegebenem Platz. Also ensteht im allgemeinen eine höhere Fragmentierung als mit **BEST**.
103 103
 2. Die Struktur der Free-Liste ändert sich nicht, aber es werden weniger Elemente (Speicherblöcke) gesucht, bevor die Adresse zurückgeliefert wird. Je größer die Free-Liste, desto länger dauert es, diese zu durchsuchen. Das Flag **FIRST** verkürzt also die Suchzeit und somit auch die insgesamte alloc-Zeit.
104
-3. - **ADDRSORT** sortiert die Liste mit dem freien Speicher nach der höhe der Adresse. Es verändert sich nichts zu vorher mit anderen Policies.
104
+3. Die verschiedenen Sortiermechanismen:
105
+   - **ADDRSORT** sortiert die Liste mit dem freien Speicher nach der höhe der Adresse. Es verändert sich nichts zu vorher mit anderen Policies.
105 106
    - Bei **SIZESORT+** sind die kleinsten *Stücke* vorne in der Liste. Bei **BEST** ist dann oft der Verschnitt, also 1-Byte-Blöcke am Anfang. 
106
-   - Bei **SIZESORT-** wird die Speicherliste absteigend nach der Größe der Blöcke sortiert. Diese Sortierung ist vorteilhaft für die Policy **FIRST**, da große Blöcke direkt am Anfang gefunden werden die sehr häufig für den angeforderten Speicher ausreichen. 
107
+   - Bei **SIZESORT-** wird die Speicherliste absteigend nach der Größe der Blöcke sortiert. Diese Sortierung ist vorteilhaft für die Policy **FIRST**, da große Blöcke direkt am Anfang gefunden werden die sehr häufig für den angeforderten Speicher ausreichen. 
108
+4. Bei größeren Speicheranforderungen schlägt malloc fehl mit dem Rückgabewert `-1` und die Free-Liste ist sehr groß. Wenn man nun die Verschmelzung von freiem Speicher mit `-C`  aktiviert, dann schlägt keine Allozierung mehr fehl und die Liste des freien Speichers ist kleiner.
109
+5. Wenn ein Load Factor von über 50% erlaubt wird, dann bleibt die Liste klein, da der Speicher nicht wieder freigegeben wird. Bei Werten bis zu 100% kommt es definitiv zu einem Fehler bei der Alloziierung, da nicht genug freier Speicher vorhanden ist. Bei Werten, die gegen 0 gehen
110
+6. ​
111
+

Loading…
取消
儲存