새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
TIL) 운영체제와 쓰레드를 정리하며
📌 2025-02-28 TIL
1. 오늘의 학습 주제
- 운영체제와 쓰레드
2. 학습 내용
운영체제는 하드웨어와 애플리케이션의 중간 매개체입니다.
제가 생각하는 운영체제를 학습하는 이유는 우리가 애플리케이션을 만드는 직업이기 때문입니다.
운영체제가 없이 애플리케이션이 하드웨어를 직접 제어한다면 다음과 같은 일들이 벌어질거라 생각합니다.
- 하드웨어에 직접 메모리 할당과 주변 기기 및 CPU 자원을 할당 받기위해 코드를 작성합니다.
- 물리적 메모리 주소를 직접 참조하기에 다른 애플리케이션과 충돌이 발생할 수 있습니다.
- 하드웨어에 실행중인 다른 애플리케이션과 조율하는 방식도 생각해야합니다.
운영체제가 없다면 JVM 처럼 중간 가상머신이 없다면 종속적인 코드를 개발해야할 수 있습니다.
운영체제는 4가지 관리자를 통해 하드웨어의 제어, 애플리케이션의 효율적인 관리로 사용자의 편의성을 높여주는 역할을 합니다.
- 프로세스 관리자
- 메모리 관리자
- 파일 관리자
- 디스크 관리자
사실 3,4 번중 하나는 맞는 걸로 기억하는데 일단 나누어 봤습니다. 주변기기는 어떻게 관리할까요
운영체제는 동작 방식이 두 개가 있습니다.
-
중앙처리 방식
모든 시스템 프로세스가 커널 모드에서 동작하기에 효율적인 자원 공유가 가능합니다.
-
나누는 방식..(명칭이 기억이 잘 안납니다.)
필수 시스템 프로세스를 제외한 나머지 프로세스는 운영체제를 통한 통신을 하여 서비스 확장에 장점이 있습니다.
프로세스가 메모리를 공유한다는 것은 어떤 장점이 있을까요?
프로세스는 하나의 사람이라고 생각하면 메모리는 책상입니다.
두 프로세스가 하나의 책상을 공유한다고 생각하면 짝꿍이랑 연필을 주고 받기도 편하고 같이 교과서도 볼수 있습니다.
만약 서로 메모리를 공유하지 않는 개별이라면 옆반 친구에게 가서 빌려야하는 경우라고 생각합니다.
옆반 친구에게 교과서를 빌리려면 옆반에 들어가야하는데 바로 들어가지 못하고 저희 초등학교때나 고등학교때는 출입해도 되는지 확인을 받았습니다. 혹은 그 친구를 불러야 합니다.
그러다보면 데이터(교과서)를 교환하거나 반납할때도 바로 옆자리에 있는 경우보다는 느릴 수 밖에 없습니다.
프로세스는 자원의 할당 단위이며 쓰레드는 작업의 단위입니다.
프로세스는 기본적으로 1개 이상의 쓰레드로 동작하기 때문이고 운영체제와 CPU는 쓰레드 단위로 작업을 처리하기하기에 쓰레드는 작업의 단위로 표현됩니다.
예를 들면 프로세스는 1학년 1반이면, 쓰레드는 반 학생 수 입니다.
한 반을 만들 기 위해서는 남는 교실이 있는지 확인해야고 거기에 맞는 선생님 배정도 해야하며 책상, 칠판 등 자원을 받아야합니다.
선생님이 과학시간이라 과학 실험실을 준비한다면 학생의 수만큼 준비를 해야합니다. 그래서 작업의 단위라고 생각합니다.
프로그램이 프로세스로 실행이되려면 운영체제가 많은 일들을 해야합니다.
- 메모리 공간 확보
- 디스크 파일 복제후 메모리에 복사
- 프로세스를 가동하기 위한 데이터 준비 (PCB, 코드 영역, 데이터 영역, 힙 메모리)
그리고 다 준비가 되면 프로그램 내의 코드를 동작할 수 있도록 프로세스 관리자가 하드웨어 준비 큐에 던져놓습니다.
이후 cpu 스케줄링 방식에 따라 코드가 실행되면서 프로세스가 가동하게 됩니다.
여러개의 동일한 프로그램을 실행한다면
프로세스는 자원의 할당 단위로 알고 있습니다.
그러면 동일한 프로그램을 실행하여 여러개의 프로세스를 만든다면 코드영역, 데이터 영역, 힙 메모리가 생깁니다.
동일한 프로그램이면 코드영역의 코드는 모두 동일할텐데 데이터를 효율적으로 쓸수 있지 않을까 생각이 듭니다
운영체제는 코드 영역과 데이터 영역을 효율적으로 사용하기 위해서 두 가지 방식을 사용합니다.
먼저 , 코드 영역은 읽기 전용으로 프로그램내 오류를 제어하며 코드를 안전하게 공유할 수 있으므로 공유가 가능하게 합니다.
두번째는 파일을 복사할 경우 기존에는 똑같은 파일 주소를 가지고 있다가 수정하는 경우에만 복사본을 만드는 경우입니다.
Page Sharing vs Copy-on-Write(COW)
Page Sharing
코드 영역은 읽기 전용입니다.
동일한 프로세스가 동작할 때 코드영역은 모두 동일하므로 하나의 코드영역만 공유해서 사용한다면 그만큼 메모리 공간을 절약할 수 있도록 도와주는 기능입니다.
Copy-on-Write(COW)
데이터 영역은 읽기, 쓰기가 가능합니다.
파일을 쓰기 전까지는 같은 메모리 주소를 가리키게 하여 데이터를 절약하고 이후 실제로 수정이 발생하는 경우에만 파일을 복사하는 방식으로 메모리를 절약하는 방법입니다.
운영체제는 왜 가상 메모리를 사용할까
운영체제는 하드웨어 자원을 효율적으로 사용하기 위해서 필요한 시스템 소프트웨어입니다.
그러기 위해서는 애플리케이션이 직접 하드자원에 접근하지 못하도록 해야합니다.
하드자원의 데이터에 직접 접근하지 못하고 운영체제가 관리하는 메모리를 사용하도록 하여야 프로그램끼리 메모리 주소 충돌이나 정보 보안이 가능하게 됩니다.
댓글남기기