글 전체보기
-
Inter-Process Communication대학/시스템소프트웨어 2022. 10. 23. 01:23
- IPC 프로세스간 통신을 위한 메커니즘으로 두 개의 기본적인 모델이 있다. Message System (이 중 하나가 Message queue) Shared Memory - Pipe pipe는 부모-자식 프로세스간 통신에서 사용하는 메커니즘으로 반이중(단방향) 통신방식을 사용한다. pipe는 파일로 취급되며, chennel 이라고도 불린다. pipe() 시스템 콜 함수를 사용하면, 두 개의 파일 지시자가 반환되는데, 파이프의 파일 지시자 0번째 인덱스는 읽기, 1번째 인덱스는 쓰기에 사용된다. int fd[2]; pipe(fd); if (fork()) { // parent close(fd[0]); write(fd[1], "How are you?", 12); } else { // child close(..
-
Timer대학/시스템소프트웨어 2022. 10. 22. 22:57
- RTC (Real-Timer Clocks) 컴퓨터 시스템의 시간, 날짜 등을 추적하는 장치로, 1초에 한 번 실행하여 시간을 추적한다. 1초에 한 번 실행되는 이유는, 메인보드에 있는 베터리 전력을 아껴쓰기 위해서이다. (전원이 꺼져있어도 수행되어야 하기에 보조 베터리를 쓰는데, 이게 크기가 작음) - System Clock System Clock는 시스템의 전원이 공급되는 순간 RTC에 저장된 시간 정보를 가져와 초기화된다. 그 후, PIT(Programmable Interval Timers)가 일정 주기마다 Timer interrupt(tick)를 발생키시는데, 이를 CPU가 캐치하여 System Clock의 값을 증가시킨다. 즉, PIT가 발생시키는 Timer interrupt는 가장 중요한 i..
-
Exceptional Control Flow 2 - Signal대학/시스템소프트웨어 2022. 10. 22. 22:17
- Signal 시그널은 OS가 어떤 이벤트가 일어났음을 프로세스에게 알리는 것이다. 다음의 예시 상황을 가정해보자. int *ptr; ptr = 0x00000100; 이렇게 합법적으로 할당받은 메모리 공간이 아닌 곳에 접근할 경우, Segmentation violation exception이 발생한다. 이런 exception 들은 CPU에서 kernel에 전달되고, kernel(OS)는 이 코드를 실행시킨 프로세스에게 signal을 보내게 된다. 시그널을 받은 프로세스가 취할 수 있는 행동은 다음 세가지 행동 중 하나이다. 시그널을 무시한다. 프로세스를 종료한다. 개발자가 정의한 시그널 핸들러로 시그널을 처리한다. 시그널은 들어왔다고 바로 처리되는게 아니다. 프로세스가 ready 상태에서 시그널이 도착..
-
Exceptional Control Flow 1 - Process대학/시스템소프트웨어 2022. 10. 22. 21:03
- Control Flow 코드는 위에서 아래로 순차적으로 흐른다. 하지만, 다음의 방법으로 이 실행 프름을 바꿀 수 있다. Jumps (c: goto) Branches (c: if) Stack 방식의 call - return (c: 함수 호출) 보통은 CPU가 이런 흐름을 처리하지만, 0으로 나누기, 데이터 입출력, ctrl+c 등 시스템 상태가 변경되는 경우 그 반응을 처리하기는 어렵다. 따라서 이런 경우는 OS가 exceptional control flow를 담당한다. - Exceptional Control Flow Low-level 메커니즘으로 system state의 변화가 일어나는 경우, 시스템 이벤트의 형태로 OS에 전달하게 된다. 그럼 OS는 이 이벤트를 이용해서 코드의 실행 흐름을 변경하..
-
System-Level I/O대학/시스템소프트웨어 2022. 10. 22. 18:24
- Disk Sector 데이터를 저장하는 기본 단위로 512bytes 당 1섹터를 구성한다. 단 1byte를 읽더라도 이 섹터 전체의 데이터를 읽어와야 한다. 이렇게 블록 단위로 데이터에 접근할 수 있는 장치를 Block device 라고 부른다. (HDD, SSD...) 반대로 1byte 단위로 데이터에 접근할 수 있는 장치를 Character device 라고 부른다. (키보드, 터미널...) - Unix files 유닉스 계열 운영체제의 파일은 m bytes의 배열 형태로 관리된다. 예로 들어 /dev/sda2 같은 파일은 /usr의 디스크 파티션을 관리하고, /dev/tty2 는 터미널 파일이다. 유닉스 파일의 종류는 다음과 같다. Regular file Directory file Device ..
-
공유 메모리대학/자료구조실습 2022. 10. 20. 22:56
- 공유 메모리 공유 메모리는 프로세스 간 통신을 위한 메커니즘 중 하나로, 여러 IPC 중 가장 빠른 수행속도를 보여준다. 하나의 메모리 영역을 서로 다른 프로세스가 접근하게 되어, 데이터 복사와 같은 불필요한 오버헤드가 발생하지 않기 때문이다. 단, 동기화 기능을 제공하지 않기 때문에, 세마포어, 뮤텍스 등의 메커니즘을 이용하여 메모리 영역 접근을 동기화 해야한다. - 공유 메모리 함수 1. key_t ftok(const char *pathname, int proj_id); 2. int shmget(key_t key, size_t size, int shmflag); 공유 메모리를 생성하고 접근할 수 있는 식별자를 반환한다. 3. void *shmat(int shmid, const void *shmad..
-
메세지 큐대학/자료구조실습 2022. 10. 20. 22:33
- 메세지 큐 메세지 큐는 프로세스 간 통신을 위한 메커니증 중 하나로, 지명 파이프와 유사하다. 큐(Queue) 데이터 구조로 관리하며, 커널에서 전역적으로 관리되기에 모든 프로세스에서 접근이 가능하다. 메세지 큐의 접근자를 아는 모든 프로세스가 동일한 메세지 큐에 접근하여 데이터를 공유할 수 있어, 다른 IPC 메커니즘에 비해서 사용법이 매우 직관적이고 간단하다. 여러 프로세스가 메세지 큐에 접근할 때, 각 메세지 유형을 지정하여 접근해야 하기에, 각 프로세스가 필요로 하는 메세지만 가져올 수 있다. 단, 하나의 메세지 스택(박스)를 분할하여 가져오는 방식은 안된다. (파이프에서 스트림 형태로 가져온 것과는 대조) - 메세지 큐 함수 1. key_t ftok(const char *pathname, i..
-
파이프대학/자료구조실습 2022. 10. 20. 22:00
- 파이프 파이프는 프로세스간 통신을 위한 메커니즘 중 하나로, 프로세스의 데이터 흐름을 다른 프로세스로 연결할 때 사용한다. (주로 한 프로세스의 출력을 다른 프로세스의 입력으로 연결) 동일한 부모 프로세스로 부터 생성된 자식 프로세스 사이(부모-자식간 통신)에서만 사용 가능하며, 익명 파이프라고도 불린다. 파이프는 프로세스 사이에 형식이 없는 데이터의 교환을 가능케 하는데, 파이프를 통해 전달되는 데이터는 단순한 바이트 스트림의 형태이다. 파이프는 4kb의 고정된 크기(용량)을 갖는데, 만약 입력되는 데이터의 크기가 파이프 버퍼(4kb)보다 크다면 interleaving, 즉 데이터를 쪼개어 분할 전송하게 된다. 만약 입력되는 데이터의 크기가 파이프 버퍼보다 작다면 atomic, 즉 확실히 데이터를 ..