안녕하세요 배트맨🦇 입니다 !
오늘은 프로세스가 어떻게 생성되고 복사되는지 알아보겠습니다.
(프로세스의 개념과 구조에 대해서는 이전 포스팅을 참고해 주시면 됩니다)
[OS] 프로세스(Process)
안녕하세요 배트맨🦇 입니다 ! 오늘 포스팅에서는 운영체제의 프로세스의 개념과 동작 원리에 대해 알아보겠습니다. 프로세스(Process) 프로세스는 메모리에 로드(Load)되어 실행 중인 프로그램을
g-batman.tistory.com
사용자가 프로그램을 시작하면 운영체제는 메모리에 프로세스를 올립니다.
프로그램이 시작될 때마다 매번 새로운 프로세스를 생성하는 것은 시간과 메모리의 낭비입니다.
운영체제는 프로세스 fork()와 exec()와 같은 시스템 콜을 통해 효율적으로 이런 부분을 관리합니다.
fork()는 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수입니다.
예를 들어 Chrome 창을 실행 중에 Chrome 창을 하나 더 실행하면 운영체제는 새로운 프로세스를 생성하지 않고 기존의 Chrome 프로세스를 복사합니다.
함수가 실행되면 실행 중인 프로세스와 복사된 프로세스는 부모-자식 관계가 됩니다.
PCB 내부에서는 다음과 같은 메모리 변화가 있습니다.
부모 프로세스의 PCB의 자식 프로세스 구분자(CPID)에는 자식 프로세스의 PID 값이 저장됩니다.
자식 프로세스의 PCB의 부모 프로세스 구분자(PPID)에는 부모 프로세스의 PID 값이 저장됩니다.
다시 말해 부모-자식 간에 서로 가리키는 PID 값을 갖습니다.
fork() 시스템 호출의 장점은
1. 프로세스 생성 속도가 빠릅니다.
2. 추가 작업 없이 자원을 상속할 수 있습니다.
3. 자원 관리에 효율적입니다.
1번은 직관적으로 이해할 수 있습니다.
2번의 추가 작업 없이 자원을 상속하는 것은 부모 프로세스가 초기화해놓은 데이터들을 자식 프로세스에서 바로 사용할 수 있다는 것입니다.
3번의 효율적인 자원 관리가 가능한 이유는 자식 프로세스가 종료되면 사용하던 자원들이 부모 프로세스로 반환되면서 부모 프로세스에서 자원을 정리하기 때문입니다.
exec()는 기존 프로세스를 새로운 프로세스로 전환하는 함수입니다.
실행 중인 프로세스의 구조를 그대로 사용하여 PCB의 코드(text) 부분만 새로운 프로그램의 코드를 사용합니다.
따라서 PCB 내부에서는 다음과 같은 변화가 있습니다.
기존 프로세스의 PPID나 CPID는 변경되지 않기 때문에 프로세스가 종료되면 다시 부모 프로세스로 돌아올 수 있습니다.
exec() 시스템 호출의 장점은
PCB를 생성하여 메모리에 올리고, 상위 프로세스에 대한 관계 설정과 같은 과정을 생략해 줄 수 있다는 점입니다.
wait()
해당 프로세스를 block 해주는 시스템 콜입니다.
부모 프로세스가 자식 프로세스를 생성하고 wait()을 호출하면 자식 프로세스가 종료될 때까지 기다립니다.
exit()
프로세스를 종료하는 시스템콜입니다. 프로세스 종료에도 방식이 있지만, 이 부분은 다음에 다루겠습니다.
도움이 되는 지식 !
컴퓨터를 오래 켜두면 느려지는 이유도 프로세스와 관련이 있습니다.
실행되었던 프로세스들이 정상적으로 종료되지 못하면서 메모리에 남는 것이 컴퓨터를 느리게 합니다. 이는 다시 부팅함으로 해결할 수 있습니다 ㅎㅎ
[OS] CPU 스케줄링 (0) | 2023.06.21 |
---|---|
[OS] 스레드(Thread) (0) | 2023.06.20 |
[OS] 프로세스(Process) (3) | 2023.01.05 |
[OS] 운영체제의 구조 (2) | 2022.12.04 |
[OS] 운영체제와 컴퓨터 구조의 이해 (1) | 2022.12.01 |
댓글 영역