9 운영체제 시작하기

컴퓨터구조보다 조금더 중요성이 높다.
귀를 기울이고 듣자

9.1 운영체제를 알아야하는 이유

윈도우 맥 리눅스 안드로이드 ios등
운영체제는 무엇이고 개발자는 왜 운영체제를 알아야할까

컴퓨터 부품들이 전기만 공급하면 알아서 착착되는게 아니고
이런애들이 결과적으로 동작하게하는 가장 근원적인 것이 운영체제이다.

모든 프로그램은 실행을 위해 자원(시스템자원)을 필요로한다.
자원을 한마디로 정의하기 어렵지만
마땅히 필요한 요소에는 컴퓨터의 네가지 핵심 부품이 포함된다.

운영체제는
실행할 프로그램에 필요한 자원을 할당하고
프로그램이 올바르게 실행되도록 돕는
특별한 프로그램이다.

운영체제 또한 프로그램이기 때문에 메모리에 적재되어 실행된다.
그렇지만 매우 중요한 프로그램이기 때문에 메모리의 커널영역에 따로 공간이 마련되고 항상 적재되어 실행된다.

일반적인 응용 프로그램은 메모리의 사용자 영역에 저장된다.
응용프로그램을 몇번지 몇번지에 저장해서 실행하는데
이런 것을 관리하는 것이 운영체제 인것이다.
이런것이 운영체제 메모리관리의 일부이다.

운영체제는 CPU도 관리한다.
우리는 프로그램을 여러 동시에 실행한다.
근데 말이 동시지 미세하게 잘라 놓으면 인지하지 못하게 빠르게 번갈아가면서 실행되고 있는 것이다.
이 환경에서 어떤 걸 먼저 나중에 오래 실행할지에 대한 문제를 운영체제가 결정해준다.

운영체제는 입출력장치도 관리한다.
다른프로그램이 하드웨어를 사용하고잇을때 이를 막기도한다.
보조기억장치를 파일과 폴더로 사용한다던지와 같은 일도 해준다.

운영체제는 하드웨어와 응용프로그램 사이에서 연결해주는 역할이라고 이해할 수도 있는 것이다.

9.1.1 결론 운영체제를 알아야하는 이유

만약 운영체제 없이 프로그램을 개발하는것은?
매우 골치아픈일이다.

만약 그냥 한다면 하드웨어를 직접 접근하는 것을 직접 작성해야한다.

프로그램을 메모리에 적재하는 코드
CPU로 하여검 덧셈을 하게하는 코드
모니터에 계산결과를 출력하는 코드 등등

운영체제는 사용자를 위한게아니라 프로그램을 위한 프로그램이다.
그래서 프로그램을 만드는 개발자는 운영체제를 알아한다.
문제는 운영체제가 가장 먼저 알게되고 운영체제를 거쳐 프로그램을 실행하게 된다.

그래서 하드웨어가 아니라 프로그램이기 때문에 운영체제와 대화를 할 수 있다.
오류메시지 등을 통해서 문제를 알 수 있다.
그래서 깊이 이해를 하면 오류메시지에 대한 이해와
때때로 운영체제가 필요한 오류를 해결 할 수 있다.

9.2 운영체제의 큰그림

정확히 운영체제가 어떤걸해주는지

이번 장에서 알아야하는것
커널이란?
운영체제의 서비스 종류
시스템 콜(시스템 호출)과 이중모드란?

운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나이다.
또한 다양한 종류의 운영체제가 있다.
이렇듯 운영체제가 제공하는 기능은 다양하다.

같은 것일지라도 아이폰 안드로이드가 다른 기능을 지원하는 것을 생각해보면된다.
그렇지만 공통적이고 가장 핵심적인 서비스는 존재한다.

운영체제는 자원에 접근하고 조작하는 기능 프로그램이 올바르고 안전하게 실해되게 하는 기능 등등은 핵심적으로 있다.

이런 운영체제 핵심 서비스를 담당하는 부분을 '커널'이라고 한다.
이 커널은 어떤 것이든 대동소이하다.

ui같은 것은 운영체제에는 속하는에 커널에는 속하지 않는다.

9.2.1 이중모드와 시스템 호출

사용자가 실행하는 프로그램은 자원에 직접 접근할 수 있을까?
메모리 cpu ssd등등에 직접접근할 수 있나?

직접접근하는 것은 매우 위험하다.
한프로그램이 접근하다 다른 프로그램이 접근하면서 삭제할 수도 있다.
그래서 충돌이 발생할 우려로 인해 직접 접근할 수 없다.

그래서 운영체제를 통해서만 접근하도록 하여 자원을 보호한다.
프로그램들이 운영체제에게 부탁하여 일종의 문지기역할을 하게 된다.
= 운영체제의 도움 운영체제의 코드를 실행해야한다.

9.2.1.1 이중모드

CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.

사용자모드 :
운영체제 서비스를 제공받을 수 없는 실행모드
커널 영역의 코드를 실행할 수 없는 실행모드
자원접근 불가

커널모드 :
운영체제 서비스를 제공받을 수 있는 실행모드
자원접근을 비롯한 모든 명령어 실행 가능

이런 이중 모드는 플래그 레지스터안에 슈퍼바이저 플래그에서 구분하고 있다.

9.2.1.2 시스템 호출

그런데 언제 사용자 모드인지 커널모드인지 구분하는지는 시스템호출이 처리한다.
커널모드로 전환하여 실행하기 위해 호출한다.
일종의 소프트웨어 인터럽트이다.
운영체제 마다 정해져있는 것을 처리하고 있다.

시스템 호출이 처리되는 방식은 하드웨어 인터럽트 처리 방식과 유사하다.
일반적인 프로그램은 자주 자원을 호출해서 빈번하게 이 과정을 거치게 된다.
굉장히 왓다갓다하면서 실행하게 된다.

위 두개념을 통해서 프로그램이 운영체제의 도움을 받아 실행한다.

9.2.2 운영체제의 핵심서비스

프로세스 관리
자원접근 및 할당
파일 시스템 관리

9.2.2.1 프로세스 관리

프로세스 == 실행중인 프로그램이라고 햇는데
수많은 프로세스들이 메모리에 적재되어 동시에 실행된다.
운영체제가 프로세스를 관리하게 된다.

동시라고하지만 내부에선 아주 빠르게 번갈아가면서 실행되고 있다.
동시다발작으로 생성 실행 삭제 되는 다양한 프로세스를 일목요연하게 관리하게 된다.
프로세스와 스레드 프로세스 동기화 교착상태 해결 등등을 실제로 어떻게 관리하는지를 배우게 될 것이다.

9.2.2.2 자원접근및 할당

CPU :
CPU 스케줄링 어떤 프로세스를 먼저 얼마나 오래 실행할까?

메모리 :
페이징 스와핑 등등
비어있는 공간을 찾아 어디에 저장할 건지와 같은 내용이다.
실행하려는게 메모리보다 클때 실행하는 방법

입출력장치 :
인터럽트 서비스 루틴

파일시스템 관리 :
파일과 폴더(디렉토리) 단위로 저장장치에 보관한다.
이 묶음을 어떻게 처리하는지 알아볼 것이다.

각각의 접근 및 할당을 알아볼것이다.

2023.09.12

운영체제 단순히 생각했는데 매우 중요한 것이다.
프로그램의 원천 그자체이다.
우리가 코드를 짜는것이 프로그램 그자체만 아니라 운영체제에게 부탁을 하는 느낌이라느 것을깨닫게되엇다.

'개념정리 > 컴퓨터 구조 및 운영체제' 카테고리의 다른 글

2023.09.27 운영체제  (0) 2023.09.28
2023.09.21 운영체제  (0) 2023.09.28
2023.09.08 컴퓨터구조  (0) 2023.09.09
2023.09.06 컴퓨터구조  (0) 2023.09.06
2023.09.05 컴퓨터구조  (0) 2023.09.06

+ Recent posts