[운영체제] 프로세스와 스레드

고럭키·2021년 4월 23일
1

운영체제

목록 보기
1/1

요즘 CS 공부에 열을 올리면서 가장 시간을 많이 투자한 부분이 운영체제다 !

이 참에 블로그에도 포스팅 하면서 누군가에게 공유도 하고, 누군가 읽을 수 있다는 책임감을 가지고 한 번 더 정확하게 확인하고 또 깔끔하게 정리할 수 있는 기회가 되었으면 좋겠다 ! 🔥

그 첫번째 주제로 이번 포스팅에서 정리할 내용은 운영체제 공부에서 빼놓을 수 없는 프로세스와 스레드이다 !

프로세스

프로세스란 무엇인가 ?

💡 프로세스란 ? 메모리에 적재되어 있는 프로그램

+ ) 프로그램 : 어떤 작업을 위해 실행하는 파일

프로세스는 운영체제로부터 시스템 자원을 할당받는다. 이 때, 할당받는 자원의 종류는 아래와 같다. 즉 아래의 자원들은 각 프로세스마다 할당되는 것이다.

  • CPU 시간
  • 운영을 위한 주소 공간
  • 메모리 영역 ( stack, heap, data, code )

프로세스의 메모리 영역

그렇다면 stack, heap, data, code에는 각각 어떠한 데이터가 올라가는지 알아보자 !

  • stack : 프로그램이 자동으로 사용하는 임시 데이터 영역으로 함수 호출시 생성되는 지역변수, 매개변수를 저장하며, 함수 종료시에 해제된다. 메모리 주소는 높은 곳에서 낮은 곳의 방향으로 할당된다.

  • heap : 프로그래머에 의해서 할당되고, 해제되는 공간으로 필요에 의해 메모리를 동적으로 할당하고자 할 때 사용하는 메모리 영역이다. ( 동적 데이터 영역 ) 스택과는 반대로 메모리 주소가 낮은 곳에서 높은 곳의 방향으로 할당된다.

  • data : BSS와 GVAR 영역을 통틀어 data영역으로 칭한다. 프로그램의 전역 변수와 정적 ( static ) 변수가 저장되는 영역으로 프로그램의 시작과 함께 할당되고, 프로그램이 종료될 때 해제된다.

    • BSS : 초기화가 되지 않은 데이터를 저장하기 위한 영역으로 RAM에 저장
    • GVAR : 초기화가 된 데이터를 저장하기 위한 영역으로 ROM에 저장

      초기화 된 데이터는 그 값을 저장해야 하므로 비휘발성 메모리인 ROM에 저장하는 것 ! 이 때, 초기화되지 않은 데이터까지 ROM에 저장하기에는 접근 속도와 같은 비용 측면에서 좋지 않기 때문에 이를 구분하여 RAM에 저장하는 것이다.

  • code : text영역이라고도 부르는 이 영역은 실행할 프로그램의 코드가 저장되는 영역이다. CPU는 이 영역에 저장된 명령어를 하나씩 가져와 수행한다. 그러므로 프로그램이 시작되고부터 저장될 때까지 메모리 영역이 유지된다.

프로세스는 위와 같이 독립적인 메모리 공간을 가지고 있으므로 프로세스간 통신은 IPC를 이용한다. 이는 뒤에 따로 포스팅으로 자세히 다루겠다.

스레드

스레드란 무엇인가 ?

💡 스레드란 ? 프로세스 내부의 실행 단위

프로세스 내의 각 스레드는 자원과 메모리 영역을 공유한다. 그러므로 한 스레드가 프로세스의 데이터를 변경하면 다른 스레드가 바로 확인할 수 있다.

그러므로 스레드간 데이터 공유는 별도의 통신을 요구하지는 않지만, 동기화 문제가 쉽게 발생할 수 있다 ! 공유 데이터의 동기화 문제는 역시 뒤에 별도의 포스팅으로 자세히 다루겠다.

하지만 스레드는 stack 영역과 레지스터( program counter ) 별도로 할당받는다.
+ ) Program Counter : CPU 레지스터 종류 중 하나로 다음에 실행할 명령어의 주소를 저장한다.

  • 스택을 별도로 할당하는 이유 : 위에서 설명했듯이 스택은 함수 호출시 매개변수, 함수의 지역변수 그리고 함수 종료 후 되돌아갈 주소 등을 저장한다. 그러므로 독립적인 함수 실행, 즉 독립적인 실행 흐름을 가능하게 하기 위해서 스택을 별도로 할당하는 것이다.
  • PC를 별도로 할당하는 이유 : 다음 실행할 명령어를 저장하는 레지스터이기 때문에 즉 명령어가 어디까지 수행되었는지를 나타낸다고 할 수 있다. 스레드는 CPU를 할당받기도 하고, 선점당하기도 하며 연속적으로 실행되지 않는다. 그러므로 어디까지 실행되었는지를 저장해야 하므로 PC를 각 스레드에 개별적으로 할당한다.

이렇게 프로세스와 스레드에 대한 개념을 정리했다 ! 끝 ! 다음 글은 뭘 정리해볼까나 !

📌 이런 저런 블로그들을 참고하며, 아이패드에 정리해둔 내용을 다시 블로그에 옮기며 정리하는 과정을 거치면서,, 처음 아이패드에 정리할 때 어떤 블로그들을 참고했는지 남겨지지가 않았습니다ㅠㅡㅠ 많은 분들의 도움을 받았는데 출처를 남길 수 없음에 죄송한 마음을 표하며, 혹시 문제가 되는 부분이 생긴다면 꼭꼭 댓글이나 메일로 알려주세요 ! 🙂 모두모두 화이팅 ~!~!~!

2개의 댓글

comment-user-thumbnail
2021년 5월 11일

쓰레드라고 검색하니 첫 번쨰로 뜨는 양질의 자료네요 잘봤습니다!

1개의 답글