프로세스(Process)와 스레드(Thread)
프로세스
실행되고 있는 컴퓨터 프로그램의 인스턴스
실행되고 있는 명령어의 흐름
OS에 의해 추상화 됨
레지스터, 메모리(코드, 데이터, 스택, 힙), I/O 상태, 시그널 관리 정보 등을 가짐
관리자 모드와 사용자 모드
관리자 모드
- 관리자 모드에서는 모든 명령들이 실행될 수 있음
- OS 커널이 동작하는 모드
사용자 모드
- 일부 명령어만 사용 가능
- OS 커널을 제외한 나머지 모든 소프트웨어들이 동작하는 모드
시스템 콜(System Call)
사용자 모드에서 동작하는 프로그램이 OS에게 서비스를 요청하는 방법
- 일반적으로 트랩(trap)을 이용하여 구현함
- 프로그램이 트랩 명령어를 실행하면 트랩이 발생하여 커널 모드로 전환됨
- 커널은 트랩을 처리하고 제어를 다시 프로그램에게 반환홤
단일 프로그래밍과 멀티 프로그래밍
단일 프로그래밍
- 한 번에 하나의 프로세스만 동작
- ex) DOS
- 자원 활용률이 낮음
멀티 프로그래밍
- 한 번에 다수의 프로세스가 동작
- Window, Unix, Linux 등의 운영체제
- 자원 활용률을 높일 수 있음
가상 메모리
- OS에 의해 시스템의 물리 메모리가 추상화 됨
- 각 프로세스에게 자신이 메모리를 독점적으로 사용한다는 환상 제공
- 각 프로세스에게 시스템의 가용 물리 메모리보다 더 큰 메모리를 가지고 있다는 환상 제공
- 논리(가상) 주소( Logical, virtual address)
- CPU에 의해 생성된 주소
- 프로그램에 의해 생성된 모든 논리 주소의 집합
- 물리 주소
- 물리 메모리의 주소
- 물리 주소 공간
- 논리 주소에 대응하는 모든 물리 주소의 집합
- OS의 가상 메모리는 가상 주소와 물리 주소간의 매핑을 담당
- 빠른 가상 주소와 물리 주소간의 변환을 위해 하드웨어인 MMU(Memory Management Unit)를 이용
프로세스간 통신
- 프로세스간 통신은 공유 주소공간에 읽기/쓰기를 통해 이루어 짐
- 다른 방법으로는 IPC가 있음
- 참고자료
Concurrency
컴퓨터 시스템은 일반적으로 멀티 프로그래밍 시스템
- 커널 프로세스는 시스템 코드를 실행
- 사용자 프로세스는 사용자 코드를 실행
- 모든 프로세스는 하나의 시스템에서 동시에 실행할 수 있음
Concurrency
- 한 프로세스의 명령어들은 다른 프로세스의 명령어들과 섞여 실행됨
- 문맥교환으로 구현
문맥 교환(Context Switching)
다른 프로세스의 명령어를 실행하기 위해 CPU가 한 프로세스에서 다른 프로세스로 전환하는 과정
- OS의 CPU 스케줄러가 담당
프로세스 문맥(Context)은 프로세스의 계속적인 수행을 위해 저장되어야 하는 정보
문맥교환
- OS는 현재 프로세스 p의 문맥을 저장하고 다른 프로세스 q의 문맥을 복구한 후 q로 제어권을 전달
- q는 제어권을 전달받고 이전에 멈춘 위치에서 이어서 실행
프로세스 상태 전이
- 프로그램이 실행될 때 해당 프로세스의 상태 변화
- 실행 중(running) : CPU를 사용 중
- 준비(ready) : 사용 가능한 CPU가 없음
- 블록됨(blocked) : 특정 이벤트(I/O 등)가 발생하기를 기다림
선점형과 협력형 멀티태스킹
- 선점형 멀티태스킹
- 작업의 선점을 허용
- 모든 프로세스는 일정 양의 CPU 시간을 할당받음
- 현대의 거의 모든 운영체제가 선점형 멀티태스킹을 지원
- 협력형 멀티태스킹
- 각 작업은 CPU와 같은 시스템 자원이 더 이상 필요하지 않을 경우 명시적으로 자원을 반환하도록 프로그램됨
- 거의 사용되지 않음
반응형
'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글
캐시 일관성과 거짓 공유 (17) | 2022.04.07 |
---|---|
스레드 (22) | 2022.04.06 |
스레드 스케줄링 (29) | 2022.03.31 |
Make / Makefile (41) | 2022.03.30 |
gcc 컴파일러 (13) | 2022.03.29 |
댓글