diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json index 9405bfd..436f43c 100644 --- a/.obsidian/core-plugins.json +++ b/.obsidian/core-plugins.json @@ -1,20 +1,30 @@ -[ - "file-explorer", - "global-search", - "switcher", - "graph", - "backlink", - "canvas", - "outgoing-link", - "tag-pane", - "page-preview", - "daily-notes", - "templates", - "note-composer", - "command-palette", - "editor-status", - "bookmarks", - "outline", - "word-count", - "file-recovery" -] \ No newline at end of file +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "properties": false, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": false +} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 80e014b..b8bdfd0 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,18 +4,21 @@ "type": "split", "children": [ { - "id": "0d1ea4f169e4254d", + "id": "c841a021395cc4d3", "type": "tabs", "children": [ { - "id": "63151d4aca9e230c", + "id": "d8a559569207f8b1", "type": "leaf", "state": { - "type": "diff-view", + "type": "markdown", "state": { - "file": ".obsidian/workspace.json", - "staged": false - } + "file": "TERCERO/SS/SS 24-25.md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "SS 24-25" } } ] @@ -38,7 +41,9 @@ "type": "file-explorer", "state": { "sortOrder": "alphabetical" - } + }, + "icon": "lucide-folder-closed", + "title": "Files" } }, { @@ -53,7 +58,9 @@ "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical" - } + }, + "icon": "lucide-search", + "title": "Search" } }, { @@ -61,14 +68,17 @@ "type": "leaf", "state": { "type": "bookmarks", - "state": {} + "state": {}, + "icon": "lucide-bookmark", + "title": "Bookmarks" } } ] } ], "direction": "horizontal", - "width": 300 + "width": 300, + "collapsed": true }, "right": { "id": "44cf06183e1c1c7d", @@ -84,6 +94,7 @@ "state": { "type": "backlink", "state": { + "file": "TERCERO/SS/SS 24-25.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -91,7 +102,9 @@ "searchQuery": "", "backlinkCollapsed": false, "unlinkedCollapsed": true - } + }, + "icon": "links-coming-in", + "title": "Backlinks for SS 24-25" } }, { @@ -100,9 +113,12 @@ "state": { "type": "outgoing-link", "state": { + "file": "TERCERO/SS/SS 24-25.md", "linksCollapsed": false, "unlinkedCollapsed": true - } + }, + "icon": "links-going-out", + "title": "Outgoing links from SS 24-25" } }, { @@ -113,7 +129,9 @@ "state": { "sortOrder": "frequency", "useHierarchy": true - } + }, + "icon": "lucide-tags", + "title": "Tags" } }, { @@ -121,7 +139,11 @@ "type": "leaf", "state": { "type": "outline", - "state": {} + "state": { + "file": "TERCERO/SS/SS 24-25.md" + }, + "icon": "lucide-list", + "title": "Outline of SS 24-25" } }, { @@ -129,7 +151,9 @@ "type": "leaf", "state": { "type": "git-view", - "state": {} + "state": {}, + "icon": "git-pull-request", + "title": "Source Control" } } ], @@ -151,8 +175,16 @@ "obsidian-git:Open Git source control": false } }, - "active": "b40a18c39aef8e17", + "active": "d8a559569207f8b1", "lastOpenFiles": [ + "Pasted image 20241017113556.png", + "Pasted image 20241017113522.png", + "TERCERO/SS/SS 24-25.md", + "Pasted image 20241017113508.png", + "Pasted image 20241017113506.png", + "Pasted image 20241017113505.png", + "TERCERO/SS/images/Pasted image 20241017113303.png", + "TERCERO/SS/images/Pasted image 20241017112904.png", "TERCERO/SPD/Teoría_2425.md", "TERCERO/ATR1/images/Pasted image 20241014101113.png", "TERCERO/ATR1/images/Pasted image 20241014100406.png", @@ -160,13 +192,6 @@ "TERCERO/ATR1/images/Pasted image 20241014092122.png", "TERCERO/ATR1/Teoría_2425.md", "TERCERO/IA/Teoría_2425.md", - "TERCERO/IA/images/Pasted image 20241011121847.png", - "TERCERO/SS/SS 24-25.md", - "TERCERO/SS/images/Pasted image 20241010115957.png", - "TERCERO/SS/images/Pasted image 20241010120358.png", - "TERCERO/SS/images/Pasted image 20241010092102.png", - "TERCERO/SS/images/Pasted image 20241010091834.png", - "TERCERO/SPD/images/Imagen de WhatsApp 2024-10-09 a las 21.20.30_7d2eb4f4.jpg", "TERCERO/SS/SS Lab.md", "SEGUNDO/ADDA/Teoría_2324.md", "TERCERO/IA/Apuntes Julia.md", diff --git a/Pasted image 20241017113556.png b/Pasted image 20241017113556.png new file mode 100644 index 0000000..d6380e1 Binary files /dev/null and b/Pasted image 20241017113556.png differ diff --git a/TERCERO/SS/SS 24-25.md b/TERCERO/SS/SS 24-25.md index bc386bf..3d99a2d 100644 --- a/TERCERO/SS/SS 24-25.md +++ b/TERCERO/SS/SS 24-25.md @@ -162,3 +162,23 @@ Es el proceso final de la construcción del ejecutable. Hay dos tipos: - **Estático:** posible en todos los IDE. - **Dinámico:** posible en algunos SO/IDE. En el dinámico, el SO completa parte del enlace en la carga del programa y/o durante su ejecución. ![[Pasted image 20241010120358.png]] +Al linker se le da ese nombre ya que el .exe es el resultado de unir secciones de cada uno de los .obj/lib. +![[Pasted image 20241017112904.png|600]] +Una vez construidas las secciones, el linker resuelve las referencias pendientes (relocalización de código). Para este proceso, el linker necesita saber qué instrucciones quedan por rellenar, que lo encuentra en la **tabla de reubicación** del archivo objeto. +![[Pasted image 20241017113303.png|600]] +## 6. Bibliotecas +Una biblioteca es básicamente un contenedor de archivos objeto. +![[Pasted image 20241017113556.png]] +### Enlace dinámico +A diferencia del **enlace estático**, donde el ejecutable se construye totalmente durante el linkado, en el **enlace dinámico** algunas bibliotecas se enlazan cuando el ejecutable se carga en memoria (por lo que se encarga el SO). +- El principal objetivo de esto es ahorrar espacio en disco y memoria. +- En **linkado estático**, si una función (por ejemplo `printf`) está en una biblioteca estática, `printf`está en el ejecutable y en **todos** los ejecutables del disco que usen la función. Si varios de los ejecutables están en ejecución, todos tendrán una copia exactamente igual de `printf`. +- El **linkado dinámico** trata de minimizar esta situación almacenando `printf` (al igual que todas las funciones de la biblioteca estándar de C/C++) en un archivo DLL, y luego sigue estos pasos: + - El SO carga el programa que usa funciones en DLL, para esto localiza todos los .dll que necesita. + - Si falta alguno, para la carga + - Si están todos, sigue la carga + - Si continúa la carga, para cada función en DLL del programa comprueba si hay algún programa usando la función (usando como ejemplo `printf`): + - Si no lo hay, carga en memoria el módulo donde está `printf` en el DLL y la enlaza. + - Si lo hay, localiza la función en memoria y la enlaza. Además crea una nueva sección de datos para `printf` en el espacio de memoria virtual del nuevo programa. + - Al cerrarse todos los programas que usan ese código, se descarga de memoria. + **El objetivo es que todo programa en ejecución comparta el código de printf.obj pero que cada uno tenga una copia privada de los datos definidos en este.** diff --git a/TERCERO/SS/images/Pasted image 20241017112904.png b/TERCERO/SS/images/Pasted image 20241017112904.png new file mode 100644 index 0000000..403e040 Binary files /dev/null and b/TERCERO/SS/images/Pasted image 20241017112904.png differ diff --git a/TERCERO/SS/images/Pasted image 20241017113303.png b/TERCERO/SS/images/Pasted image 20241017113303.png new file mode 100644 index 0000000..5712202 Binary files /dev/null and b/TERCERO/SS/images/Pasted image 20241017113303.png differ