CS님을 아세요? - 2번째

invisible_thorn·2024년 10월 6일
0

🖥️ CS

목록 보기
3/4
post-thumbnail

프로세스가 뭐냐면

프로그램이 실행되기 전 : 보조기억장치에 있는 데이터 덩어리
프로그램이 실행된 후 : 프로그램 -> 프로세스 (wow)

프로세스는 프로그램을 보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간! 생성된다.

포그라운드 프로세스 VS 백그라운드 프로세스

작업 관리자처럼 우리가 볼 수 있는 공간에서 실행되는 프로세스인 포그라운드 프로세스가 있고, ps? 명령어? 라는 우리가 볼 수 없는 뒤편에서 실행되는 프로세스인 백그라운드 프로세스가 있다.

근데 또 여기서 사용자와 직접 상호작용이 가능한 백그라운드 프로세스가 있고, 아닌 것도 있다.
아닌 백그라운드 프로세스를 윈도우 운영체제에서는 서비스라고 부른다고 한다.

프로세스 제어 블록(PCB)은?

특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조이다.
PCB는 운영 체제가 프로세스를 표현한 것이라 할 수 있다.

모든 프로세스가 실행을 위해 CPU를 사용해야하지만 그 자원이 한정 되어있기 때문에 프로세스들은 차례로 돌아가며 제한된 시간만큼 이용한다.

타이머 인터럽트가 발생할 때마다 위 과정을 반복한다.

프로세스의 실행 순서를 관리하고 자원을 배분하기 위해 프로세스 제어 블록을 이용한다.

이 친구는 프로세스와 관련된 정보를 저장하는 자료구조로, 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장된다.(그리고 얘도 커널 영역에 생성됨)
또한 프로세스 생성 시 만들어지고 실행이 끝나면 폐기된다.

* 새로운 프로세스 생성 = 운영체제가 PCB 생성
* 프로세스 종료 = 운영체제가 PCB 폐기

라고 생각하면 된다.

PCB 안에는 굉장히 많은 정보가 들어간다 ㄷㄷ
프로세스 ID, 레지스터 값, 프로세스 상태, CPU 스케줄링 정보, 메모리 정보 관리, 사용한 파일과 입출력장치 목록 등...

문맥 교환?

내가 아는 문맥은 수능 국어 볼 때나 썼던 말인 거 같은데 여기서 나오네 신기방기
Context Switching이라고도 하는 듯 ㅇㅇ

PCB에서 프로세스를 관리하며 타이머 인터럽트가 발생했을 때, 그동안 실행했던 내용들을 백업을 해둬야 다시 차례가 왔을 때 실행을 재개할 수 있겠죠?

이러한 하나의 프로세스 수행을 다시 시작하기 위해 기억해야할 정보를 문맥이라고 부른답니다.(PCB에 저장되는 정보들이라고 봐도 됨)

문맥 교환은 여러 프로세스가 끊임없이 빠르게 번갈아가며 실행되는 원리이기에, 자주 일어나면 우리 눈에는 프로세스가 동시에 실행되는 것처럼 보인다고 한다.

프로세스의 메모리 영역

프로세스 생성 시 커널 영역에 PCB가 생성된다.
그렇다면 사용자 영역은 어떨까?

메모리에 크게 stack, heap, data, code 영역으로 나뉘어 저장된다.
많이들 아는 내용일테지만 확실하게 다시 정리를 해보자.

코드 영역

텍스트 영역이라고도 한다.
데이터가 아닌 CPU가 실행할 기계어로 이루어진 명령어가 저장되므로 쓰기가 금지 되어있다.(읽기 전용 공간임)

데이터 영역

잠깐 썼다 없앨 데이터가 아니고!
프로그램이 실행되는 동안 유지할 데이터가 저장되는 영역이다.
전역 변수가 대표적임

코드 영역과 데이터 영역은 크기가 변하지 않는다.
그래서 코드, 데이터 영역은 정적 할당 영역
힙, 스택 영역은 동적 할당 영역이라고 부른다
근데 이제 우리가 생각한 정적 할당과 동적 할당과는 다른...

힙 영역

프로그램을 만드는 사용자가 직접 할당할 수 있는 저장 공간이다.
여기서는 직접 할당을 했기 때문에 언젠가 메모리 공간을 반환해야한다.
그렇지 않으면 할당된 공간이 메모리 내에 계속 남아 메모리 낭비(메모리 누수)를 초래한다. 꼭 해제해주세요

스택 영역

데이터를 일시적으로 저장하는 공간으로, 데이터 영역에 담기는 값과는 달리 잠깐 쓰다 말 값이 저장되는 공간이다.
보통 함수의 실행이 끝나면 사라지는 매개 변수, 지역 변수가 대표적이다.

이렇게 나뉘는 이유는 최대한 데이터를 공유하여 메모리 사용량을 줄여야하기 때문이다.

프로세스 상태와 계층 구조

프로세스도 부모 자식 관계를 가진다고 합니다.
이게 무슨 소리인지 자세히 알아봅시다.

프로세스 상태라는 것은?

운영체제가 프로세스의 상태를 PCB를 통해 인식하고 관리한다.
앞 전에 PCB에 들어간 정보 중에 프로세스 상태라는 게 있었지?

나야, 프로세스 상태 다이어그램

생성 상태(new): 프로세스를 생성 중인 상태, 준비된 프로세스는 바로 실행이 아니라 준비 상태가 되어 CPU 호출 기다림
준비 상태(ready): 차례가 되지 않아 기다리는 상태, 차례가 되면 CPU를 할당받아 실행 상태가 됨
실행 상태(running): CPU 할당 받고 실행 중인 상태, 할당된 모든 시간 사용 -> 준비 상태, 입출력장치 작업 끝까지 기다림 -> 대기 상태
대기 상태(blocked): 입출력장치의 작업을 기다리는 상태, 작업완료 -> 준비 상태
종료 상태(terminated): 프로세스가 종료된 상태, 운영체제는 PCB와 프로세스가 사용한 메모리를 정리

프로세스 계층 구조

프로세스는 실행 도중 시스템 콜을 통해 다른 프로세스를 생성할 수 있다.
이 때 새 프로세스를 생성한 프로세스를 부모 프로세스, 이에 의해 생성된 프로세스를 자식 프로세스라고 한다.
(계속해서 트리구조로 나아감)

프로세스 생성 기법

부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성하고, 만들어진 복사본(자식 프로세스)는 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체 한다.

프로세스는 대충 이러한 개념들을... 갖고 있고 이제 곧 스레드에 대해 알아보자

0개의 댓글

관련 채용 정보