운영체제(OS)
컴퓨터 시스템은 크게 CPU, 메모리, 디스크로 구성되어 있다고 볼 수 있다.
각각의 하드웨어를 연결했다고 해서 우리가 원하는 프로그램을 수행할 수 있는 것은 아니다.
단지 하드웨어는 각각 특정 기능을 수행 할 뿐이다.
CPU는 '연산'을 메모리는 '순간 기억'을 디스크는 '저장'하는 역할을 물리적으로 하게 된다.
컴퓨터라는 하드웨어 상에 어플리케이션(소프트웨어)들이 동작되려면, 적절하게 데이터를 주고 받으며 논리적인 일들을 해야하는데,
이러한 응용 프로그램들을 수행하기 위해서 하드웨어와 인터페이스하는 기본 프로그램으 '운영체제'라고 한다.
운영체제의 3대 기능
1. CPU의 수행 시간을 나누는 '프로세스 관리'
2. 서로 다른 앱이 메모리를 사용하는데 있어서 문제가 없도록 해주는 '메모리 관리'
3. 파일이 저장되어 있는 '디스크 관리'
운영체제의 기능 'CPU' 관리
스레드 : 각 프로세스에 한 개 이상 존재하고 그 프로세스가 포함하고 있는 수행부를 한개씩 수행하는 역할을 함.
여러 개의 스레드가 동시에 CPU를 사용(연산을위해)하려고 요청하는데, 정리해주고 효율적으로 CPU를 사용할 필요가 있다.
이를 '프로세스/스레드 관리'라고 한다.
프로그램이 수행된다는 의미는,
디스크에 있는 파일이 메모리 상으로 로드가 되고 -> CPU가 그 명령어를 수행
하는 것을 의미한다.
✔️ 레지스트리 : 운영 체제의 설정과 선택 항목을 담고 있는 데이터베이스로, 모든 하드웨어, 운영 체제 소프트웨어, 사용자 PC 선호도 등에 대한 정보와 설정이 들어 있다
여러 개의 스레드가 동시에 수행이 되는데, 엄밀히 말하면 동시가 아니라 순차적으로 수행이 된다.
기존에 수행되고 있던 것은 수행을 멈추고, 다음 스레드에게 CPU 사용권을 넘겨줘야한다.
이를 위해서 현재 수행되고 있는 레지스트리나 CPU내의 값의 정보를 남겨둬야하는데, 이 상태를 '컨텍스트'라고 하고,
이것을 남기고 다음 환경으로 복원하는 과정을 '문맥 교환' == 컨텍스트 스위칭(context switching)이라고 한다.
동시 수행을 위한 멀티 스레드
멀티 스레드 프로그램은 스레드를 2개 이상 가지며, 동시에 기능을 처리 할 수 있다. (엄밀히 말하면 동시 수행은 아니다.)
물론 최근 듀얼 코어라고 하면 동시에 명령어를 2개 수행할 수 있기 때문에, 동시라는 말이 성립이 된다.
✔️ 멀티스레드 : 여러 개의 스레드를 하나의 프로세스 내에서 수행한다.
우선순위 스케줄링
: 여러 개의 앱이 동시에 수행을 요구하고, CPU의 사용을 요구할 때 어떻게 할 것인지?를 반영하여 적절하게 CPU사용을 할 수 있도록
시간을 배분해 주는 것.
이때, 중요한 개념이 두 가지가 있다.
1. 어떤 어플리케이션을 먼저 수행 할 것인가?
2. 어떻게 효율적으로 적은 노력과 시간으로 수행중인 어플리케이션을 중지시키고 다음 어플리케이션을 수행할 수 있을 것인가?
현재 사용하고 있는 스케줄링 방식은 '라운드-로빈' 방식이다.
선점형 우선순위 방식인데, 이는 수행중인 스레드보다 우선 순위가 높은 스레드가 오면 그 수행을 멈추고
자리를 비쳐줘야 하는 방식이다.
이렇게 하는 이유는 : 전체 효율이 가장 높이지기 때문
우선순위는 프로세스와 스레드가 갖게 된다. 태생부터가 우선순위가 높은 것이 있는가 하면,
수행 도중에 그 우선순위를 일시적으로 높게 바꿀 수도 있다.
하지만, 수행 중에는 바꿀 수 있는 범위에 한계가 있다.
즉, 태생이 높은 것을 일시적으로 바꿔서 더 높아질 수는 없다는 의미.
윈도우는 기본적으로 스레드가 CPU 사용을 대기하고 있고, 그 줄은 여러 줄로 서 있는데,
그 줄의 의미는 우선순위이다. 이때, 수행이 계속 안되는 현상이 생길 수 있는데, 이를 '기아현상'이라고 부른다.
운영체제의 기능 '가상 메모리'
프로그램은 수행되는 동안 프로그램의 일부 모듈이 메모리에 적재된다.
메모리는 CPU에 가까울수록 속도가 높아진다. 이러한 상태에서 메모리는 한계를 가지게 되는데,
그 메모리의 용량을 좀 더 크게 사용할 필요가 있다.
이것이 가능한 이유는 프로그램에서 바라보는 메모리의 주소가 실제 주소도 있지만, 가상주소로 지정이 가능하기 때문이다.
이를 프로그램에서 바라볼 때는 가상주소로 보고 실제 메모리를 접근할 때에는 실제 주소로 대응을 하게 된다.
실제 메모리 이상의 메모리를 사용하려고 할 때, 가상 메모리를 사용하게 된다.
가상 메모리라고 디스크의 일부를 메모리로 사용하는 것이다.
실제 메모리를 사용하다가 사용하지 않는 데이터를 디스크에 저장하게되고, 수행을 할 때에는 실제 메모리로 로드하게 된다.
이러한 동작의 반복은 하드웨어와 운영체제간의 동작이며 앱 측면에서는 메모리를 사용하는 것과 동일한 상태로 보여진다.
운영체제의 기능 '디스크 관리'
하드 디스크는 외부 기억장치로써 시스템을 구성하는 요소 중 하나가 된다.
CPU와 메모리 디스크로 구성이 될 때, 디스크는 전원이 꺼진 상태에도 내용이 유지되는 저장장치이다.
윈도우에서의 어플리케이션 실행 순서
'개발공부 > 컴파일러&운영체제' 카테고리의 다른 글
비전공자 운영체제 part.4 : 커널 (0) | 2022.08.22 |
---|---|
비전공자 운영체제 part.3 : 캐시 메모리 (0) | 2022.08.20 |
비전공자 운영체제 part.2 : 메모리 (0) | 2022.08.19 |
비전공자 운영체제 part.1 : CPU (0) | 2022.08.18 |