728x90
프로세스란
- 실행 중인 프로그램이며 프로세스의 현재 활동 상태는 프로그램 카운터와 다른 레지스터로 나타난다.
- 현대 컴퓨팅 시스템의 작업 단위이다.
*프로그램: 명령어 리스트를 내용으로 가진 디스크에 저장된 파일
*프로세스 자체가 다른 개체를 위한 실행 환경으로 동작할 수도 있다.
프로세스의 메모리 레이아웃
스택 - 함수를 호출할 때 임시 데이터 저장장소(함수 매개변수, 복귀주소, 지역변수)
(아래로 메모리 확장됨)
(스택과 힙 메모리가 만나면 안됨)
(위로 메모리 확정됨)
힙 - 프로그램 실행 중 동적으로 할당되는 데이터
데이터 - 전역변수
텍스트 - 실행코드
- 프로세스 상태
- 준비
- 실행
- 대기
- 종료
프로세스 제어 블록 PCB
운영체제의 프로세스를 나타내는 커널 데이터 구조
프로세스 상태 |
프로그램 카운터 |
CPU 레지스터 |
CPU 스케쥴링 정보 |
메모리 관리 정보 |
회계정보 |
입출력 상태 정보 |
다중 프로그래밍의 목적
CPU 활용을 최대화 하기 위해 항상 어떤 프로세스가 실행되도록 보장
*다중 프로그래밍의 정도: 현재 메모리에 있는 프로세스 수
시분할의 목적
각 프로그램이 실행되는 동안 사용자가 상호작용 할 수 있도록 프로세스들 사이에서 CPU 코어를 빈번하게 교체하는것.
프로세스 스케줄러의 역할
CPU에서 실행할 수 있는 사용 가능한 프로세스를 선택하는 것
문맥교환
운영체제는 한 프로세스 실행에서 다른 프로세스 실행으로 전환할 때 문맥 교환을 수행한다.
좀비 프로세스
부모가 자식을 관리하지 않아서 발생하는 프로세스
자식에게 리턴을 받지 않고 종료
고아 프로세스
부모 프로세스가 자식 프로세스보다 빨리 종료된 프로세스
프로세스 생성
- UNIX: fork()
- Windows: CreateProcess()
프로세스간 통신 방법(IPC)
- 독립적 프로세스
- 협력적 프로세스
- 정보공유: 복사-붙여넣기
- 계산 가속화: 서브 태스크로 나눠 병렬로 실행
- 모듈성: 시스템 기능을 별도의 프로세스들 또는 스레드로 나누어 모듈식으로 구성하길 원할 때
- 공유 메모리
: 공유 메모리 영역은 구축할 때 만 시스템 콜이 필요하고 그 후 모든 접근은 일반적인 메모리 접근으로 취급되어 커널이 필요없다. - 메시지 전달
: 충돌을 회피할 필요가 없어 작은 양의 데이터를 교환 분산 시스템에서 공유 메모리보다 구현하기 쉽다. 시스템 콜을 사용하기 때문에 부가적인 시간 소비작업이 필요해 느리다. - 파이프
- 클라이언트-서버
메시지 전달에서 IPC
- 직접통신: 서로의 이름을 명시, 하드코딩
- 간접통신: 메일박스 또는 포트에 송신되고 그것으로 부터 수신된다.
- 동기식: 메일박스에 의해 수신될 때 까지 봉쇄
- 바돟기식: 송신 프로세스가 메시지를 보내고 작업을 재시작
*mailbox: 추상적으로 프로세스에 의해 메시지가 넣어지고 메시지들이 제거될 수 있는 객체
UNIX 파이프
- 일반 파이프: 부모-자식 관계에 있는 프로세스 간의 통신을 위해 설계되었다. 읽기 종단과 쓰기 종단이 있다.
- 지명 파이프: 일반적이고 여러 프로세스가 통신할 수 있다.
Windows 파이프
- 익명 파이프: 일반 파이프와 유사하다. 단방향이며 부모-자식 관계여야 한다.
- 지명 파이프: UNIX에 대응되는 FIFO보다 풍부한 프로세스 간 통신 방식을 제공한다.
클라이언트-서버
- 소켓: 다른 시스템의 두 프로세스가 네트워크를 통해 통신할 수 있다.
- 원격 프로시저 호출(RPC): 다른 컴퓨터에 있는 프로세스에서 함수를 호출할 수 있는 방식으로 함수(프로시저) 호출 개념을 추상화 한다.
728x90
'Computer Science > Operating System' 카테고리의 다른 글
🌌운영체제 구조 (0) | 2020.06.17 |
---|---|
🥓Thread (0) | 2020.06.16 |
🚀CPU 스케줄링 알고리즘 (0) | 2020.06.16 |
OS #1 - Operating System Introduction. (0) | 2020.04.20 |
댓글