Table of Contents
Literatura
Skripta Vysoké školy báňské http://projekty.fs.vsb.cz/463/edubase/VY_01_043 soubor Operační systémy.pdf
Andrew S. Tanenbaum: Operating Systems Design and Implementation
William Stallings: Operating Systems: Internals and Design Principles
Abraham Silberschatz, Peter B. Galvin, Greg Gagne: Operating System Concepts http://codex.cs.yale.edu/avi/os-book/
Randal E. Bryant and David R. O'Hallaron: Computer Systems: A Programmer's Perspective, 2/E http://csapp.cs.cmu.edu/2e/samples.html
Minulé příklady
Program Linking http://csapp.cs.cmu.edu/2e/ch7-preview.pdf
Procesy a vlákna
Procesy http://www.tutorialspoint.com/operating_system/os_processes.htm
Plánování procesů https://www.tutorialspoint.com/operating_system/os_process_scheduling.htm
( Long Term Scheduler az Comparison among Scheduler můžete přeskočit, Context Switch doporučuji prečíst )
Vlákna https://www.tutorialspoint.com/operating_system/os_multi_threading.htm
Videa
Můžete se podívat na jednoduchý uvod http://www.youtube.com/watch?v=fxMOi7BlTyM
Nebo na klasickou přednášku http://www.youtube.com/watch?v=LNiNOW-_8lw
Process management http://www.youtube.com/watch?v=elzvHG6M-eU
Kompletní přednášky podle knihy Operating System Concepts
Chapter 6: CPU Scheduling, part 1 http://www.youtube.com/watch?v=Nq5LwpgXY6o
Chapter 6: Processes, part 2 http://www.youtube.com/watch?v=0hjn5k5rN-Y
Synchronizace procesů
Úvod - synchronizace http://www.geeksforgeeks.org/introduction-of-process-synchronization
Semafory http://www.geeksforgeeks.org/semaphores-in-process-synchronization/
Semafory - videa
Introduction to Semaphores http://www.youtube.com/watch?v=e2ujg5K310s
Uváznutí procesů - videa
Deadlock http://www.youtube.com/watch?v=x9FF723STvo
Deadlock Avoidance with Resource Allocation Graph, od 9min40sec https://www.youtube.com/watch?v=nDDytwtIMXE
Resource Allocation Graph http://www.youtube.com/watch?v=-VksGXfiK7k
Kompletní přednášky podle knihy Operating System Concepts
Chapter 5: Process Synchroninzation http://www.youtube.com/watch?v=RDovfnKH6lU
Chapter 7: Synchronization http://www.youtube.com/watch?v=0RpzPerKSX0
Správa paměti
Memory management http://www.tutorialspoint.com/operating_system/os_memory_management.htm
( Dříve používané segmenty http://www.geeksforgeeks.org/memory-segmentation-8086-microprocessor )
Virtual memory http://www.tutorialspoint.com/operating_system/os_virtual_memory.htm
Virtual memory http://csapp.cs.cmu.edu/2e/ch9-preview.pdf
videa
Virtual Memory http://www.youtube.com/watch?v=ujoJ7J_l9cY
Memory Management Using Paging http://www.youtube.com/watch?v=kt4LkPFt8Zg
Page Fault in Virtual Memory http://www.youtube.com/watch?v=kt4LkPFt8Zg
Page replacement, prvních 11 minut http://www.youtube.com/watch?v=FWoMSiMep80
videa - Virtual Memory - David Black-Schaffer
( Virtual Memory: 1 Introduction http://www.youtube.com/watch?v=qcBIvnQt0Bw )
( Virtual Memory: 2 Three problems with Memory http://www.youtube.com/watch?v=eSPFB-xF5iM )
Virtual Memory: 3 What is Virtual Memory http://www.youtube.com/watch?v=qlH4-oHnBb8
Virtual Memory: 4 How Does Virtual Memory Work http://www.youtube.com/watch?v=59rEMnKWoS4
Virtual Memory: 5 Page Tables http://www.youtube.com/watch?v=KNUJhZCQZ9c
Virtual Memory: 6 Address Translation http://www.youtube.com/watch?v=ZjKS1IbiGDA
Virtual Memory: 7 Address Translation Example http://www.youtube.com/watch?v=6neHHkI0Z0o
Virtual Memory: 8 Page Faults http://www.youtube.com/watch?v=bShqyf-hDfg
Virtual Memory: 9 Memory Protection http://www.youtube.com/watch?v=uDzXXnNy544
Virtual Memory: 10 Making Virtual Memory Fast http://www.youtube.com/watch?v=uyrSn3qbZ8U
Virtual Memory: 11 TLB Example http://www.youtube.com/watch?v=95QpHJX55bM
Kompletní přednášky
Chapter 8: Main memory, part 1 http://www.youtube.com/watch?v=Jy_teuaj7Ic
Chapter 8: Main memory, part 2 http://www.youtube.com/watch?v=8Zw4gIqqZe0
Chapter 8: Main memory, part 3 http://www.youtube.com/watch?v=gUSOVZK7PaU
Chapter 9: Virtual Memory http://www.youtube.com/watch?v=KTx9RNfyFO8
“slidy” z knihy naleznete na http://www.os-book.com/OS10/slide-dir/index.html
Soubory zobrazované do paměti (memory mapped files)
Windows CreateFileMapping, MapViewOfFile http://www.labri.fr/perso/betrema/winnt/manamemo.html
( Linux mmap http://www.tutorialspoint.com/inter_process_communication/inter_process_communication_memory_mapping.htm )
( Win32 shared memory http://docs.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory )
Unix, souborový systém
http://www.tutorialspoint.com/operating_system/os_file_system.htm
Souborový systém http://www.tutorialspoint.com/unix/unix-file-system.htm
Přístupová práva http://www.tutorialspoint.com/unix/unix-file-permission.htm
Unix, jádro
http://www.oreilly.com/library/view/understanding-the-linux/0596002130/ch01s06.html
http://www.tutorialspoint.com/operating_system/os_linux.htm
( http://www.pearsonhighered.com/assets/samplechapter/0/1/3/0/0130187062.pdf )
( http://www.geeksforgeeks.org/introduction-of-system-call )
Unix, uživatelé a skupiny
http://www.tutorialspoint.com/unix/unix-user-administration.htm
http://www.linode.com/docs/tools-reference/linux-users-and-groups
( http://www.pluralsight.com/blog/tutorials/linux-add-user-command )
Různá videa
Přístupová práva k unixovým souborům
Zde jsou popsána přístupová práva read, write, execute
http://cs.wikipedia.org/wiki/P%C5%99%C3%ADstupov%C3%A1_pr%C3%A1va_v_Unixu
http://en.wikipedia.org/wiki/File_system_permissions#Traditional_Unix_permissions
Myslím, že přístupová práva pro soubory jsou jasná. Podívejme se na read a execute pro adresáře.
Přístupová práva pro adresáře:
- r - vypsat soubory v adresáři
- w - přidat nebo vymazat soubor nebo adresář
- x - vstoupit do podresáře pomocí “cd, change directory”
Vytvoříme si adresář, ve kterému “ostatní” uživatelé mají jen právo read
ll /src drwxr-xr-- 2 inst inst 4096 May 12 13:51 test
V tomto adresáři uživatel se jménem “inst” vytvoří soubor “test.txt”
ll /src/test -rw-r--r-- 1 inst inst 10 May 12 13:51 test.txt
Konzolové příkazy v Linuxu
Jinému uživateli, který ani nepatří do skupiny “inst” se nepodaří ani vypsat adresář
ll /src/test ls: cannot access '/src/test/test.txt': Permission denied total 0 -????????? ? ? ? ? ? test.txt
Ani zobrazit obstah souboru
cat /src/test/test.txt cat: /src/test/test.txt: Permission denied
Je to divné: pro adresář i soubor mám právo read.
Do adresáře pomocí cd nevstupuji, tak bych execute pro adresář neměl potřebovat.
Výpis adresáře v jazyce C
V dokumentaci knihovny jazyka C, glibc, používané v Linuxu naleznu program pro výpis adresáře.
http://www.gnu.org/software/libc/manual/pdf/libc.pdf
- 14.1 Working Directory, getcwd, chdir
- 14.2 Accessing Directories
- 14.2.2 Opening a Directory Stream. opendir
- 14.2.4 Simple Program to List a Directory
#include <stdio.h> #include <sys/types.h> #include <dirent.h> int main (void) { DIR *dp; struct dirent *ep;dp = opendir ("/src/test"); if (dp != NULL) { while (ep = readdir (dp)) puts (ep->d_name); closedir (dp); } else { perror ("Couldn't open the directory"); } return 0; }
Program přeložím příkazem
gcc list.cc -lc -o list.bin
A program zobrazí jméno souboru “test.txt”
Program v jazyce Python
Zobrazí obsah adresáře. Ale nezobrazí obsah souboru.
from __future__ import print_function import os for t in os.listdir ("/src/test") : print ("FILE", t) f = open ("/src/test/test.txt", "r") print (f.read ()) f.close ()
Obsah souboru - program jazyce C
Ani program v jazyce C nezobrazí obsah souboru
#include <stdio.h> #include <stdlib.h> int main () { FILE * f = fopen ("/src/test/test.txt", "rb"); if (f != NULL) { fseek(f, 0, SEEK_END); long fsize = ftell(f); fseek(f, 0, SEEK_SET); /* same as rewind(f); */ char * text = (char *) malloc (fsize + 1); fread (text, 1, fsize, f); fclose(f); text [fsize] = 0; printf ("%s", text); } else { perror ("Couldn't open the file"); } return 0; }
Toaru OS
Zkusme se podívat na přistupová práva v jednoduchém OS.
http://toaruos.org/
http://github.com/klange/toaruos/releases
Zde jsou jednotlivá systémové funkce http://github.com/klange/toaruos/blob/master/kernel/sys/syscall.c
Např. sys_read kontroluje přistupová práva
if (!(FD_MODE(fd) & 01)) {
Nebo sys_write
if (!(FD_MODE(fd) & 02)) {
Makro FD_MODE kontroluje přístupová práva, která si systém poznamenel při otevření souboru
int sys_open(const char * file, int flags, int mode) { if (!(flags & O_WRONLY) || (flags & O_RDWR)) { if (node && !has_permission(node, 04)) { return -EACCES; } else { access_bits |= 01; } } if ((flags & O_RDWR) || (flags & O_WRONLY)) { if (node && !has_permission(node, 02)) { return -EACCES; } } else { access_bits |= 02; } } /* ... */ }
Funkce has_permission
http://github.com/klange/toaruos/blob/master/kernel/fs/vfs.c#L29
int has_permission (fs_node_t * node, int permission_bit) { if (!node) return 0; if (current_process->user == 0 && permission_bit != 01) { /* even root needs exec to exec */ return 1; } uint32_t permissions = node->mask; uint8_t user_perm = (permissions >> 6) & 07; uint8_t other_perm = (permissions) & 07; if (current_process->user == node->uid) { return (permission_bit & user_perm); } else { return (permission_bit & other_perm); } }
Funkci has_permission ještě nalezneme v souboru kernel/fs/vfs.c
http://github.com/klange/toaruos/blob/master/kernel/fs/vfs.c#L354
Opravdový Linux
Přístupová práva kontroluje funkce inode_permission
https://elixir.bootlin.com/linux/latest/source/fs/namei.c#L425
Systémová funkce ksys_chdir pro změnu aktuálního adresáře
http://elixir.bootlin.com/linux/latest/source/fs/open.c#L453
kontroluje execute právo.
int ksys_chdir (const char __user *filename) { /* ... */ error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_CHDIR); /* ... */ }
Ostatní systémové funkce https://elixir.bootlin.com/linux/latest/source/include/linux/syscalls.h#L431
Úkoly
Vyberte si jeden úkol a pokuste se odpovědět
- Popište kdy potřebujeme execute právo pro adresáře ( a mohou se mírně lišit informace získané experimentem a z různých popisů )
- Jedoduchý systém ToaruOS nepracuje s právy pro skupinu, navrhněte kousek programu, který práva skupiny zkontroluje.
- Zkuste slovy vysvětlit komentář v ToaruOS: /* even root needs exec to exec */
- Zkuste najít ve zdrojovém textu Linuxu další místa kde se kontrolují přístupová práva