개발세발
12. 동적 할당 영역과 시스템 호출 본문
◼️ 정적할당 영역
: 코드영역과 데이터 영역
- 프로세스가 실행되기 직전에 위치와 크기가 결정되고 실행되는 동안 변하지 않으므로 정작 할당 영역이라고 부름
◼️ 동적할당 영역
: 스택영역과 힙 영역
- 프로세스가 실행되는 동안 만들어지는 영역으로 그 크기가 늘어났다 줄어들기도 하는 동적 할당 영역
• 스택
: 함수 호출 시 두 가지 작업을 구현하기 위해 사용
1. 호출한 함수가 종료되면 함수를 호출하기 전 코드로 되돌아와야 하는데 되돌아올 메모리의 주소를 스택에 저장함
2. 변수 사용 범위에 영향을 미치는 영역 scope을 구현할 때 사용
- 전역변수 global variable - 모든 함수에서 사용 , 지역 변수 local variable - 특정 함수에서만 사용
- 함수에서 사용하는 지역 변수는 함수가 호출될 때만 사용되다가 함수가 종료되면 사용한 공간을 반환해야 하는데, 지역 변수를 저장할 때 스택이 사용됨
• 힙
: 동적으로 할당되는 변수 영역
- 프로그램이 실행되는 동안 데이터 영역이 할당되는 것으로 대표적으로 malloc() 함수가 있음
: malloc() 함수는 프로그램이 실행 중일 때 사용자가 직접 힙 영역에 메모리를 할당할 수 있게 해줍
➡️ 새로운 프로세스가 생성되면 malloc() 함수를 사용하여 프로세스 제어 블록의 구조체를 만들고 해당 큐에 삽입하며, 프로세스가 종료되면 free() 함수를 사용하여 해당 프로세스 제어 블록이 차지하던 메모리 공간을 반환함
◼️ exit() 시스템 호출
: 작업의 종료를 알려주는 시스템 호출
- exit() 함수를 선언함으로써 부모 프로세스는 자식 프로세스가 사용하던 자원을 빨리 거둬갈 수 있음
- 전달하는 인자를 확인하여 작식 프로세스가 어떤 상태로 종료되었는지를 알려주는데 인자가 0이면 정상종료, -1 이면 비정상 종료임
◼️ wait() 시스템 호출
- 운영체제가 부모 프로세스가 먼저 종료됨으로써 미아 프로세스가 생기는 것을 방지하기 위해 wait() 시스템 호출을 사용함
- 자식 프로세스가 끝나기를 기다렸다가 자식 프로세스가 종료되면 다음 문장을 실행함
• 전면 프로세스 foreground process
후면 프로세스 background process
➡️ 그래픽 사용자 인터페이스가 아니라 텍스트만 사용하는 유닉스의 셸에도 전면 프로세스와 후면 프로세스 개념이 적용됨
'코딩공부 > OS' 카테고리의 다른 글
14. 스케줄링 시 고려 사항 (0) | 2023.02.10 |
---|---|
13. 스케줄링의 개요 (0) | 2023.01.10 |
11. 스레드 (0) | 2023.01.06 |
10. 프로세스의 연산 (0) | 2023.01.06 |
09. 프로세스 제어 블록과 문맥 교환 (0) | 2023.01.02 |