일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 안드로이드 유닛 테스트
- 스택 큐 차이
- android ar 개발
- jvm 작동 원리
- 서비스 쓰레드 차이
- android retrofit login
- ar vr 차이
- 안드로이드 os 구조
- 안드로이드 레트로핏 사용법
- rxjava disposable
- 안드로이드 레트로핏 crud
- 플러터 설치 2022
- 안드로이드 라이선스
- Rxjava Observable
- 스택 자바 코드
- 객체
- 자바 다형성
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 라이선스 종류
- 안드로이드 유닛 테스트 예시
- 클래스
- 2022 플러터 설치
- jvm이란
- rxjava cold observable
- 멤버변수
- 서비스 vs 쓰레드
- rxjava hot observable
- 큐 자바 코드
- ANR이란
- 안드로이드 유닛테스트란
- Today
- Total
나만을 위한 블로그
[혼공컴운] 10. 프로세스와 쓰레드 본문
프로세스 개요
포그라운드 프로세스 : 유저가 보는 앞에서 실행되는 프로세스
백그라운드 프로세스 : 유저가 보지 못하는 뒤에서 실행되는 프로세스. 유저와 상호작용 가능한 프로세스도 있지만 상호작용 없이 작동하는 프로세스도 있음
상호작용 없이 작동하는 백그라운드 프로세스 : 유닉스에선 데몬, 윈도우에선 서비스라 부름
프로세스 제어 블록
모든 프로세스는 실행에 CPU가 필요하지만 CPU 자원은 한정돼 있다. 즉 모든 프로세스가 CPU를 동시에 사용할 순 없다
자기 차례가 되면 정해진 시간만큼 CPU를 쓰고, 끝남을 알리는 타이머 인터럽트가 발생하면 자기 차례를 양보하고 다음 차례가 올 때까지 기다림
OS는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고 프로세스에 CPU 등 자원을 분배 -> 이걸 위해 프로세스 제어 블록(PCB)을 사용함
프로세스 제어 블록 : 프로세스 관련 정보를 저장하는 자료구조. 상품의 태그와 같음. 커널 영역에 생성되고 프로세스 생성 시 만들어지며 실행이 끝나면 폐기됨
프로세스 ID
프로세스 ID(PID) : 특정 프로세스 식별을 위해 부여하는 고유 번호. 같은 일을 수행하는 프로그램이라도 2번 실행하면 PID가 다른 두 프로세스가 생성됨
문맥 교환
문맥(context) : 프로세스 하나를 수행하기 위해 기억해야 할 정보
하나의 프로세스 문맥은 해당 프로세스의 PCB에 기록돼 있음 -> PCB에 쌓이는 정보들을 문맥이라 볼 수 있음
문맥 교환(context switching) : 기존 프로세스의 문맥을 PCB에 백업하고 새 프로세스 실행을 위해 문맥을 PCB로부터 복구해서 새 프로세스를 실행
프로세스의 메모리 영역
한 프로세스는 사용자 영역에 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나눠 저장됨
코드 영역
- a.k.a 텍스트 영역
- 기계어로 된 실행 가능한 명령어가 저장됨
- CPU가 실행할 명령어가 담겨서 쓰기가 금지돼 있음 -> Read Only
데이터 영역
- 프로그램이 실행되는 동안 유지할 데이터(전역 변수 등)가 저장되는 공간
- 코드 영역, 데이터 영역은 크기가 변하지 않음 = 정적 할당 영역
- 힙 영역, 스택 영역은 프로세스 실행 과정에서 크기가 변할 수 있음 = 동적 할당 영역
힙 영역
- 개발자가 직접 할당 가능한 저장 공간
- 힙 영역에 메모리 공간을 할당하면 언젠가는 해당 공간을 반환해야 함
- 반환하지 않으면 메모리에 계속 남아서 메모리 낭비를 일으킴 = 메모리 누수
스택 영역
- 데이터를 일시적으로 저장하는 공간. 잠깐 쓰고 말 값들이 저장됨
- 함수 실행이 끝나면 사라지는 매개변수, 지역변수 등이 저장됨
프로세스 상태와 계층 구조
프로세스 상태
프로세스가 가질 수 있는 대표적 상태는 아래와 같음
생성 상태
- 프로세스를 생성 중인 상태
- 갓 메모리에 적재되서 PCB를 할당받은 상태
준비 상태
- CPU를 할당받아 실행할 수 있지만 아직 자기 차례가 아니라 대기 중인 상태
- 차례가 되면 CPU를 할당받아 실행 상태가 됨
실행 상태
- CPU를 할당받아 실행 중인 상태
- 할당된 일정 시간 동안에만 CPU 사용 가능
- 시간을 모두 사용해서 타이머 인터럽트가 발생하면 준비 상태가 되고, 실행 도중 입출력장치를 써서 입출력장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 됨
대기 상태
- 프로세스 실행 도중 입출력장치를 사용하는 경우, 입출력장치의 작업을 기다리는 상태
- 입출력 작업이 끝나면 해당 프로세스는 다시 준비 상태로 변경
종료 상태
- 프로세스가 종료된 상태
- 프로세스가 종료되면 OS는 PCB, 프로세스가 사용한 메모리를 정리
프로세스 계층 구조
부모 프로세스 : 새 프로세스를 생성한 프로세스
자식 프로세스 : 부모 프로세스가 만든 프로세스
PPID : 부모 프로세스의 PID
자식 프로세스는 실행 과정에서 다른 자식 프로세스를 만들 수 있다. 여러 OS는 이렇게 프로세스가 프로세스를 만드는 계층적 구조로 프로세스들을 관리함. 이 과정을 도표로 그리면 트리 구조가 되는데 이를 프로세스 계층 구조라 함
프로세스 생성 기법
fork : 자신의 복사본을 자식 프로세스로 생성
exec : 만들어진 복사본이 자신의 메모리 공간을 다른 프로그램으로 교체
쓰레드
한 프로세스는 하나의 일만 수행함. 하나의 실행 흐름을 갖고 한 번에 한 부분만 실행되는 프로세스는 실행의 흐름 단위가 하나라는 점에서 단일 쓰레드 프로세스라고 볼 수 있음
여기서 쓰레드 개념이 도입되며 프로세스를 구성하는 여러 명령어를 동시 실행할 수 있게 됨
-> 쓰레드 : 프로세스를 구성하는 실행 단위
멀티 프로세스 : 여러 프로세스를 동시 실행하는 것
멀티 쓰레드 : 여러 쓰레드로 프로세스를 동시 실행하는 것
프로세스끼리는 기본적으로 자원을 공유하지 않지만 쓰레드는 같은 프로세스 내의 자원을 공유함
-> 멀티 프로세스 환경에선 한 프로세스에 문제가 생겨도 지장이 적거나 없지만 멀티 쓰레드 환경에선 한 쓰레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음
'책 > 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
[혼공컴운] 12. 프로세스 동기화 (0) | 2023.12.29 |
---|---|
[혼공컴운] 11. CPU 스케줄링 (0) | 2023.12.28 |
[혼공컴운] 9. 운영체제 시작하기 (0) | 2023.12.25 |
[혼공컴운] 8. 입출력장치 (0) | 2023.12.25 |
[혼공컴운] 7. 보조기억장치 (0) | 2023.12.25 |