모의면접으로 학습하는 CS 스터디
- 운영체제 2주차
프로그램
- 프로그램 정의
- 저장장치에 저장된 정적인 상태
- 어떤 데이터를 사용하여 어떤 작업을 할 지 절차를 적어놓은 명령어들의 집합
- 예시
프로세스
- 프로세스 정의
- 프로그램이 실행을 위해 하드 디스크에 있던 프로그램이 메모리에 올라온 동적인 상태
- 하나의 작업 단위
-
프로세스 특징
-
운영체제에 의해 관리
-
운영체제도 프로그램이라 프로세스 형태로 실행됨
- 컴퓨터 전원 ON -> 부트스트랩이 운영체제 관련 프로세스 실행 -> 일반 프로세스 실행
-
프로세스 간 접근할 수 없음
-
서로 독립적인 메모리 공간을 가짐
-
커널이 프로세스 메모리 위치와 크기 정보, 생명 주기를 관리함
-
프로세스 간 통신을 위해선 IPC를 이용해야함
-
프로세스 주소 공간
- 종류
- 사용자 공간
- 프로세스 코드, 데이터, 힙, 스택 영역이 할당되는 공간
- 커널 공간
- 프로세스가 시스템 호출을 통해 이용하는 커널 공간
- 커널 코드, 커널 데이터, 커널 스택 존재
- 커널 공간은 모든 사용자 프로세스에 의해 공유됨
프로세스 문맥
문맥 교환(Context Switch)

- 문맥 교환 정의
- CPU가 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
- 실행 중이던 프로세스 -> PCB에 작업 내용 저장
- 실행 상태로 변경되는 프로세스 -> PCB 내용으로 CPU 세팅
- 문맥 교환 발생하는 경우
-
멀티태스킹
- 실행 가능한 프로세스들이 운영체제의 스케줄러에 의해 조금씩 번갈아 수행
- CPU를 할당받을 대 문맥교환 발생
-
인터럽트 처리
- 인터럽트 처리 시 문맥 교환 발생
(CPU 사용시간 만료 , I/O Request 등)
-
사용자 및 커널모드 전환
- 운영체제에서 사용자 모드와 커널 모드 사이 전환 시 운영체제에 따라 문맥 교환 발생
- 문맥 교환 발생 과정
1. 프로세스 P1 사용 시간 끝나서 타임아웃
2. P1 프로세스 제어 블록에 현재까지의 작업 결과 저장. 준비상태로 변경
3. 준비 상태이던 프로세스 P2를 실행 상태로 변경
4. CPU 레지스터가 P2의 PCB 내용으로 변경되어 작업 실행
- 관련 개념
- 타임 슬라이스
- 정의 : 한 프로세스에게 정해진 작업 시간
- 특징
- 너무 클 경우 -> 한 프로세스의 작업이 끝난 뒤 다른 프로세스 작업이 이루어질 때까지 긴 시간이 걸려 작업이 끊겨보임
- 너무 작을 경우 -> 시스템 성능 떨어짐. 문맥 교환에 시간이 걸려 여기에 시간 다 쓰느라 실제 작업을 하지 못함
- 결론 : 되도록 작게 설정하되 문맥 교환에 걸리는 시간을 고려해야함
프로세스의 메모리 공간

- 정적 할당 영역 vs 동적 할당 영역
- 정적 할당 영역
- 프로세스가 실행되기 직전에 위치와 크기 결정
- 실행되는 동안 변하지 않음
- 코드 영역, 데이터 영역
- 동적 할당 영역
- 프로세스가 실행되는 동안 만들어지는 영역
- 힙 영역, 스택 영역
- 각 영역 특징
- 코드 영역(= 텍스트 영역)
- 프로그램의 본문 기술
- 프로그래머가 작성한 프로그램은 코드 영역에 탑재. 읽기 전용으로 처리
- 데이터 영역
- 코드가 실행되면서 사용하는 변수나 파일 등 각종 데이터를 모아둠
- 보통 프로세스의 전역 변수, 정적 변수가 적재됨
- 데이터는 변하는 값이기 때문에 읽기, 쓰기 가능. 그러나 상수로 선언된 변수는 읽기 전용 처리
- 힙 영역
- 동적으로 할당되는 변수의 영역
- 대부분의 데이터는 데이터 영역에 저장. malloc()함수의 경우 프로그램이 실행되는 동안 할당되므로 힙 영역에 저장
- 스택 영역
- 운영체제가 프로세스 실행 위해 부수적으로 필요한 데이터를 모아둔 곳
- 프로세스 내 함수 호출 시 원래 프로그램으로 되돌아올 위치 또는 지역 변수, 매개 변수, 리턴값이 저장
- 사용자에게는 보이지 않음
프로세스 제어 블록(PCB)
-
프로세스 제어 블록 정의
- 프로세스를 처리하는 데 필요한 다양한 정보가 들어있는 데이터 구조
-
특징
- 커널 영역에 생성
- 프로세스가 끝나면 프로세스 제어 블록도 폐기됨
- 프로그램이 프로세스로 변경 -> 프로세스 제어 블록이 생성되었다는 뜻
-
프로세스 제어 블록 구조
- 포인터
- 준비상태, 대기상태는 큐로 운영. 그래서 큐를 구현하기 위해 포인터를 사용
- 프로세스 상태
- 프로세스 구분자 (PID)
- 프로그램 카운터
- CPU 스케줄링 정보
- 스케줄링에 필요한 정보
- 프로세스의 중요도는 다르기 때문에 프로세스 우선순위에 따라 프로세스 제어블록이 큐에 저장되고 우선순위에 따라 실행됨
- 각종 레지스터 정보
- 프로세스 실행 때 누산기나 색인 레지스터 스택 포인터와 같은 중간값들을 저장하여 다음에 실행할 때 사용할 수 있도록 함
- 메모리 관리 정보
- 프로세스가 메모리의 어디에 있는지 나타내는 메모리의 위치정보
- 메모리 보호를 위한 경계 레지스터, 한계 레지스터 세그먼테이션 테이블, 페이지테이블에 대한 정보
- 할당된 자원 정보
- 프로세스 실행을 위해 사용하는 입출력 자원, 오픈파일 등에 대한 정보
- 어떤 프로세스가 음악 출력을 위해 사운드 카드에 접근해야한다면 사운드카드에 대한 정보 필요. 이러한 정보를 프로세스 제어블록에 저장
- 계정 정보
- 부모프로세스 & 자식프로세스
- 부모프로세스를 나타내는 PPID
- 자식프로세스를 나타내는 CPID
멀티 프로세스
- 멀티 프로세스 정의
- 특징
- 각 CPU는 독립적으로 작동 가능
- IPC 이용하여 통신
- 문맥 교환 비용이 큼
- 독립된 메모리 영역을 할당받기 때문에 공유하는 메모리가 없음
- 그래서 오버헤드 발생 문제 존재
- 동기화 작업이 필요하지 않음
프로세스 상태
- 활성 상태 vs 비활성 상태
- 활성 상태 : 생성, 준비, 실행, 대기, 완료 상태
- 비활성 상태 : 휴식 상태, 보류 상태
프로세스 간 통신
-
프로세스 간 통신(IPC) 정의
- 프로세스들 사이에서 데이터를 주고 받는 방식
- 종류
- Message Passing
- Shared Memory
-
Message Passing
-
정의
- 커널 영역에 메시지 전달을 위한 채널을 만들어 메시지 형태로 정보를 Send/Receive 하는 방법
-
종류
- Direct Communication : 통신하려는 프로세스 이름을 명시적으로 표시해 메세지 직접 전달
- Indirect Communication : mailbox 또는 port 이용해 간접 전달
-
모델 : 파이프 vs 메세지큐 vs 소켓
-
파이프

-
메세지큐

-
큐 사용하는 방식. FIFO 방식
-
먼저 들어온 메세지를 먼저 수신하지만 특정 메시지가 수신될 수도 있음
-
메시지 또는 패킷 단위로 동작
-
부모 - 자식 간이 아니더라도 어느 프로세스 간의 데이터 송수신 가능
-
양방향 통신 가능. 메세지 형태는 사용자 정의 가능
-
비동기 방식이라 방대한 처리량이 있으면 나중에 처리 가능
-
소켓

- 여러 컴퓨터에 있는 프로세스끼리 통신(네트워킹) 할 때 사용
- 양쪽 PC에서 포트 번호를 확인. 해당 포트를 이용해 소켓 찾아 데이터를 주고받음
- 네트워크 소켓 이용해 클라이언트 - 서버 구조로 데이터 통신 진행
- 양방향 통신 가능
-
장점
- 커널에서 데이터를 주고받음을 컨트롤할 수 있어 별도의 동기화 로직 필요없음
-
단점
- 커널 통해서 데이터를 주고받기 때문에 Shared Memory 방식보다 느림
-
Shared Memory

-
정의
-
장점
- 메모리에 직접 접근해 Message Passing 모델보다 속도가 빠름
-
단점
- 프로세스 A가 공유 메모리에 데이터를 전달해도 프로세스 B는 알수 없음.
- 그래서 데이터를 읽어야 하는 시점을 모름
- 별도의 동기화 기술 필요
fork() 명령어

-
fork() 정의
- 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수
-
특징
- 커널에서 제공
- 실행중인 프로세스 -> 부모 프로세스
- 새로 생성된 프로세스 -> 자식 프로세스
- 부모 프로세스 영역의 대부분이 자식프로세스로 복사되나 변경사항 존재
- 프로세스 구분자
- 메모리 관련 정보
- 부모 프로세스 구분자, 자식 프로세스 구분자 변경
- 자식 프로세스 기준 : 부모프로세스 구분자 표시, 자식 프로세스는 -1로 표시
-
장점
-
프로세스 생성 속도가 빠름
- 하드디스크에서 새로 가져오는 것이 아닌 기존 메모리에서 복사하는 것
- 그래서 자식 프로세스의 생성 속도가 빠름
- 추가 작업 없이 자원 상속 가능
- 부모 프로세스가 사용하던 모든 자원을 추가 작업 없이 자식프로세스에 상속 가능
- 효율적인 시스템 관리
- 부모-자식 프로세스가 서로 구분자로 연결되어 있어서 자식프로세스 종료하면 자식이 사용하던 자원을 부모가 정리할 수 있음