|
2389 | 2389 |
|
2390 | 2390 | %%%%% |
2391 | 2391 |
|
2392 | | - |
2393 | 2392 | \begin{slide} |
2394 | | -\sltitle{Jádro, re¾imy, pøeru¹ení (klasický UNIX)} |
| 2393 | +\sltitle{kernel, modes, interrupts/traps (classic UNIX)} |
2395 | 2394 | \begin{itemize} |
2396 | | -\item procesy typicky bì¾í v u¾ivatelském re¾imu |
2397 | | -\item systémové volání zpùsobí pøepnutí do re¾imu jádra |
2398 | | -\item proces má pro ka¾dý re¾im samostatný zásobník |
2399 | | -\item jádro je èástí ka¾dého u¾ivatelského procesu, není to samostný proces |
2400 | | -(procesy) |
2401 | | -\item pøepnutí na jiný proces se nazývá \emph{pøepnutí kontextu} |
2402 | | -\item obsluha pøeru¹ení se provádí v kontextu pøeru¹eného procesu |
2403 | | -\item klasické jádro je nepreemptivní |
| 2395 | +\item the processes typically run in user mode |
| 2396 | +\item a system call will cause switch to kernel mode |
| 2397 | +\item a process has one stack for each mode |
| 2398 | +\item kernel is part of each user process, it is not a standalone process(es) |
| 2399 | +\item switching to different process is called \emph{context switch} |
| 2400 | +\item interrupt handling is performed in the context of interrupted process |
| 2401 | +\item classic kernel is non-preemptive |
2404 | 2402 | \end{itemize} |
2405 | 2403 | \end{slide} |
2406 | 2404 |
|
2407 | 2405 | \begin{itemize} |
2408 | | -\item \emsl{jádro není oddìl{}ená mno¾ina procesù, bì¾ících paralelnì s |
2409 | | -u\-¾i\-va\-tel\-ský\-mi procesy, ale je èástí ka¾dého u¾ivatelského procesu.} |
2410 | | -\item pøechod mezi u¾ivatelským re¾imem a re¾imem jádra není pøepnutí kontextu |
2411 | | --- proces bì¾í poøád v tom samém |
2412 | | -\item pøeru¹ený proces nemusel pøeru¹ení vùbec zpùsobit |
2413 | | -\item v re¾imu jádra mù¾e proces pøistupovat i k adresám jádra, která z |
2414 | | -u\-¾i\-va\-tel\-ské\-ho re¾imu pøístupná nejsou; takté¾ mù¾e pøistupovat k |
2415 | | -instrukcím (napø. instrukce manipulující se stavovým registrem), jejich¾ |
2416 | | -vykonání v u¾ivatelském re¾imu vede k chybì |
2417 | | -\item pøeru¹ovací rutina se nemù¾e zablokovat, proto¾e tím by zablokovala |
2418 | | -proces; proces se toti¾ mù¾e zablokovat jen ze své vlastní vùle. Moderní unixy |
2419 | | -dnes pou¾ívají interrupt vlákna, v jejich¾ kontextu se \emsl{mohou} drivery |
2420 | | -zablokovat. |
2421 | | -\item to, ¾e klasické unixové jádro je nepreemptivní znamená, ¾e \emsl{jeden |
2422 | | -proces nemù¾e zablokovat jiný proces} |
2423 | | -\item pøi obsluze pøeru¹ení se mù¾e stát, ¾e nastane dal¹í pøeru¹ení. Pokud je |
2424 | | -jeho priorita vìt¹í, je procesorem pøijmuto. Posloupnost pøijmutých pøeru¹ení |
2425 | | -je uchována v \emph{zásobníku kontextových vrstev}. |
2426 | | -\item \emsl{u moderních kernelù je situace èasto velmi rozdílná -- obsluha |
2427 | | -pøe\-ru\-¹e\-ní, preemptivnost kernelu atd.; k nìkterým vìcem se mo¾ná |
2428 | | -dostaneme pozdìji bìhem semestru} |
| 2406 | +\item \emsl{The kernel is not a set of processes running in parallel with |
| 2407 | +user processes, rather it is part of each user process.} |
| 2408 | +\item The transition between user and kernel mode is not a context switch |
| 2409 | +-- the process is still running in the same context. |
| 2410 | +\item The interrupted process is not necessarily the one that caused it. |
| 2411 | +\item In kernel mode a process can access kernel memory that is not accessible |
| 2412 | +from user mode. Likewise it can execute privileged instructions that would |
| 2413 | +otherwise cause error in user mode (like state register manipulations). |
| 2414 | +\item Interrupt routine cannot block because it would block the process; |
| 2415 | +process can block only on its own. Moder Unixes use interrupt threads, |
| 2416 | +in their context the drivers \emsl{can} block. |
| 2417 | +\item The fact that classic UNIX kernel is non-preemptive means that |
| 2418 | +\emsl{one process cannot block another process}. |
| 2419 | +\item An interrupt can come while handling another interrupt. If its priority |
| 2420 | +is higher, it is accepted by the CPU. The sequence of accepted interrupts is |
| 2421 | +saved in \emph{interrupt context stack}. |
| 2422 | +\item \emsl{Modern kernels are very different in terms of interrupt handling, |
| 2423 | +kernel preemption, etc.} |
2429 | 2424 | \end{itemize} |
2430 | 2425 |
|
2431 | 2426 | %%%%% |
|
0 commit comments