프로그램 vs. 프로세스 vs. 스레드
프로그램이란 파일이 저장 장치에 저장되어 있지만 메모리에 올라가 있지 않은 정적인 상태를 의미한다. 즉 어떤 실행 파일이 실행되지 않으 상태로 코드 덩어리일뿐이다. 이 프로그램이 실행되기 위해서는 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해줘야 한다.
프로세스란 저장장치에 있는 정적인 파일이 운영체제에 의해 독립적인 메모리 공간을 할당받아 메모리에 로드된 상태를 말하는 것이다. 정적인 상태의 파일인 프로그램을 실행시키면 운영체제가 해당 파일에게 독립적인 메모리 공간을 할당해주고, 해당 메모리 공간에 올라간 프로그램은 동적인 프로세스 상태가 된다.
스레드는 간단히 요약하자면, 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로이다. 즉 프로세스 내의 하나의 실행 흐름인 것이다. 이게 뭔말인지 이해하려면 스레드 개념의 배경을 알아야 한다.
과거에는 프로그램의 시작부터 끝까지 하나의 프로세스만으로도 충분했다고 한다. 하지만 프로그램이 점점 복잡해짐에 따라 하나의 프로세스 만으로는 효율적으로 프로그램을 처리하지 못하게 되었다. 그러면 하나의 프로그램에 대해 여러개의 프로세스를 생성하면 되지 않을까?라는 생각이 들게 되는데, 이건 운영체제의 동작 원리상 불가능한 일이다. 운영체제는 안정성을 위해 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보를 접근하려고 하면 오류를 발생시킨다. 따라서 한 프로그램의 처리를 위해 여러개의 프로세스를 생성하는 것은 불가능한 것이다. 그래서 이런 프로세스의 한계를 해결하기 위해 생긴 개념이 스레드이다.
스레드는 같은 프로세스 내에 있는 다른 스레드들과 메모리를 공유하며 작동한다. 즉 프로세스의 자원을 공유할 수 있다는 것이다.
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
스택과 힙의 차이 및 속도 차이가 나는 이유 (in 할당 / 해제) (0) | 2022.10.10 |
---|---|
[운영체제] 메모리의 구조 (0) | 2021.09.17 |