시스템 프로그래밍
-
System-Level I/O시스템 프로그래밍 2022. 4. 5. 14:56
Unix I/O Overview 리눅스 file은 일련의 byte의 연속입니다. 한마디로 byte덩어리의 배열과 비슷하다고 보면 됩니다. ex) B0, B1, ....,Bk (size는 모두 똑같습니다) 모든 I/O 장치들은 file로 표현되어있습니다. (disk, 터미널, 커널 등등) 우리가 보통 input이라고 하면 외부 장치(HDD, SDD, 터미널, 네트워크 등등)에서 main memory까지 데이터가 오는것을 의미하고 output은 main memory의 데이터를 외부 장치로 가는것을 말합니다. 우리는 printf나 scanf처럼 ANSIC에서 제공하는 standard I/O 라이브러리에 내재되있는 함수를 사용합니다. Unix는 시스템 레벨인 커널에 있는 Unix I/O함수 를 이용해 High-..
-
Exceptional Control Flow : Signals and Nonlocal Jumps시스템 프로그래밍 2022. 3. 29. 01:33
Shell 리눅스 process의 hierarchy입니다. init에서 시작해 tree구조로 되어있습니다. Shell이란 user대신에 프로그램을 실행시키는 응용 프로그램입니다. 즉, 사용자와 OS kernel의 interface로 shell은 OS 에서 사용자의 명령을 받아 읽고 해석해 Hardware에게 명령을 내리는 것입니다. 예를 들어 unix shell이나 C shell, bash 등등 이 있습니다. shell은 기본적으로 2가지로 실행됩니다. 바로 command를 읽는 read 부분과 입력받은 command를 실행하는 evaluate부분 입니다. Simple Shell 입력받은 command를 실행(evaluate)하는 부분입니다. command에는 총 2가지 유형이 있습니다. 1) Foreg..
-
Exceptional Control Flow : Exceptions and Processes시스템 프로그래밍 2022. 3. 10. 14:50
Control Flow (제어 흐름) process(CPU)는 사용자가 전원을 키고 끌때 까지 단순히 메모리에 있는 instruction들을 순차적(seqential)으로 차례대로 한번에하나씩 실행합니다. 이러한 flow를 Control Flow라고 합니다. Altering the Control Flow 그러나 우리는 하나의 프로그램만을 실행하는 것이 아니라 여러개의 프로그램을 동시에 실행할 수 도 있습니다. 그렇게 되면 CPU 입장에서는 순차적으로 instruction들을 수행하지 못할 수 있습니다. 따라서 순차적으로 진행하는 control flow를 바꿔줄 필요가 있습니다. 예를 들어 Jump나 branch같은 분기 명령어나, 함수 Call, go to문, 함수 return등 을 통해 Program ..