CH09_운영체제

Jobmania·2023년 5월 14일
0

운영체제

목록 보기
1/13
post-thumbnail

09-1) 운영체제를 알아야 하는 이유

개발자가 왜 운영체제를 알아야 될까?
: 운영체제를 통해 컴퓨터 부품을 관리하고 개발자가 개발한 프로그램이 실행되기 때문.

<운영체제란?>

  • 자원(Resource)은 프로그램 실행에 필요한 요소라고 한다.
    자원 예시 ) CPU, 메모리, 보조기억장치와 같은 컴퓨터 부품들과 패킷
  • 운영체제는 자원을 관리하고 실행하는 프로그램에 자원을 할당하고 돕는 특별한 프로그램

🎆운영체제도 역시 프로그램이기때문에 메모리에 할당된다.

  • 운영체제는 특별한 프로그램이기 때문에 커널 영역(kernel space)이란 공간에 따로 적재되어 실행이 된다.
  • 사용자영역 : 응용(일반) 프로그램 실행되는 영역

🤪나는 word프로그램을 실행할때 2000번에 적재해라고 명령을 한적이 없다. 누가 명령했지??

  • 운영체제가 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램은 메모리에서 삭제해서 지속적으로 메모리 자원을 관리한다.

<운영체제의 CPU 관리>

  • 동시에 3개의 프로그램을 실행시 CPU가 아주 빠르게 번갈아가며 실행하고 있는 것이다.
  • 어떤 프로그램을 먼저, 나중에, 오래동안 실행할지 운영체제가 결정한다.

<운영체제의 입출력 장치 관리>

  • 하드웨어와 응용프로그램사이의 필요한 자원을 할당하고 올바르게 실행되도록 관리한다.

🧐 하드웨어와 응용프로그램의 연결점 = 운영체제

  • 운영체제는 효율적으로 자원을 배분
  • 실행할 프로그램들이 지켜야할 규칙을 만들어서 컴퓨터 시스템 전체를 관리한다.
  • 운영체제 내부에서는 CPU 관리, 프로세스 관리, 파일 시스템 관리, 메모리관리 등 관리하는 부분이 묶여져 있다.

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

  • 만약 운영체제 없이 프로그램을 개발하는것? -> 하드웨어와 응용프로그램을 직접 개발자가 개발해야한다.

EX) 🤢 1+2를 모니터에 출력하라

  1. 프로그램을 메모리에 적재하는 코드.
  2. CPU로 하여금 1과 2를 더하게 명령하는 코드.
  3. 모니터에 계산결과를 출력하는 코드 ....

😂 운영체제 덕분에 하드웨어를 조작하고 관리하는 기능을 제공받기때문에 작성할 필요가 없다.

그렇다면 ? 왜 운영체제를 알아야 됨??

운영체제는 사용자를 위한 프로그램이 아님! => 프로그램을 위한 프로그램이다.
-> ! 프로그램을 만드는 개발자는 프로그램을 직접적으로 다루는 운영체제를 잘아야 더욱 깊이 이해할 수 있다.

  • 하드웨어가 문제가 생길 때 운영체제가 가장 먼저 확인한다.
  • 현재 코드가 어떻게 실행되었는지 보여준다.

운영체제와의 대화 (오류 메세지)

운영체제가 주는 오류메세지 ->> 문제 해결의 실마리

09-02) 운영체제의 큰 그림

  • 커널영역?
  • 운영체제의 서비스 종류?
  • 시스템 콜(시스템호출)과 이중모드?

<운영체제의 심장🔥, 커널>

  • 예시로 리눅스는 이렇게 방대한 소스 코드를 가지고있다.
  • 종류로는 윈도우, 안드로이드, MAC, Linux,....
  • 운영체제가 제공하는 기능은 다양하지만 가장 핵심적인 서비스는 존재한다.

    자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 수행하는 기능

커널 (kernel)

  • 운영체제의 핵심 서비스를 담당하는 부분
  • 마치 사람의 심장기능을 담당하고, 어떤 커널을 사용하느냐에 따라 실행하고 개발하는 프로그램이 하드웨어를 이용하는 양상이 달라진다.

🙄운영체제에 속하는데 커널에 속하지 않는 기능

유저인터페이스(UI), 커맨드라인 인터페이스(CLI)
-> 사용자와 상호작용하기 위한 통로!

이중모드와 시스템 호출

  • 응용프로그램은 자원에 직접 접근은 위험하다!!!
  • 그래서 운영체제는 응용 프로그램들이 자원에 접근하려 할때 오직 자신을 통해서만 접근하도록 하여 자원을 보호 ! ( 마치 자원 접근을 대행하는 문지기)

😁 응용프로그램이 하드 디스크에 접근할 때 ?

  • 운영체제에 도움을 요청해서( = 운영체제의 코드를 실행)해야한다~
  • 운영체제의 하드 디스크 저장코드를 실행해서 하드디스크에 정보를 저장한다.
  • 이중모드가 운영체제의 문지기 역할을 수행한다.

운영체제의 이중모드(dual mode)

  • 이중모드란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드, 커널모드 로 구분하는 방식이다.
  • 사용자모드 (일반적인 응용프로그램 실행모드)
    - 운영체제 서비스를 제공받을 수 없는 실행 모드
    -
    커널 영역의 코드를 실행할 수 없는 실행모드
    - 자원 접근 불가
  • 커널모드
    - 운영체제의 서비스를 제공받을 수 있는 실행모드
    -
    자원 접근을 비롯한 모든 명령어 실행 가능

  • CPU는 플래그 레지스터의 슈퍼바이저 플래그를 통해 모드를 확인해서 자원 접근을 대행하고 보호한다!!

그렇다면 언제 커널모드로 변경될까?
바로 운영체제에 서비스 제공을 받기 위한 요청 시스템호출(System Call) 을 하여 모드를 전환한다.

  • 시스템호출은 마치 소프트웨어의 인터럽트 라고도 한다. (호출 처리 방식이 하드웨어 인터럽트와 유사)
  • 실행흐름🐱‍🏍 ( 실제로 시스템호출은 빈번히 일어난다!)

리눅스 시스템 콜

운영체제의 핵심 서비스

3가지로

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

1. 프로세스 관리

  • 실행 중인 프로그램 == 프로세스
  • 메모리에 적재되어 지금 실행되고 있는 프로그램
  • 수많은 프로세스들이 동시에 실행되고 있음

-> 이렇게 다양한 상황을 어떻게 일목요연하게 관리를 할까?
==> 여러 프로세스가 동시에 실행되는 환경에서 ' 프로세스 동기화 '이상 실행되지 못하는 상황에서는 ' 교착 상태 '를 해결 해야함!

2. 자원 접근 및 할당프로세스 관리

CPU

  • CPU 스케줄링 : 어떤 프로세스를 먼저, , 얼마나 오래 공평하게 할당하고 실행할까? 이를 결정할 수 있어야 한다.

메모리 (페이징, 스와핑...)

  • 새로운 프로세스가 실행될때 어느 메모리가 비어있는곳 어느 주소를 적재할 지 결정해야한다.!
  • 또는 모든 프로세스를 굳이 모두 메모리에 적재해야할까?
  • 때로는 메모리보다 큰 프로세스(또는 메모리가 꽉찼을때) 어떻게 실행해야할까?

입출력장치

  • 인터럽트 서비스 루틴
    키보드, 마우스 입출력

3. 파일 시스템 관리

파일과 폴더 또한 운영체제가 제공하는 기능

  • 관련된 정보를 파일이라는 단위로 저장장치에 보관
  • 파일을 묶어 폴더(디렉토리) 단위로 저장장치에 보관

가상 머신과 이중모드의 발전

이중모드와 더불어 가상머신을 통한 가상화를 지원하는 현대 CPU는 두가지 모드 이상을 지원한다.

가상머신(Virtual machine)이란 ?

  • 말 그대로 소프트웨어적으로 만들어낸 가상의 컴퓨터이다.
  • 만약 컴퓨터에 설치된 운영체제에 가상머신을 설치 및 실행한다면, 그 가상머신 또한 응용프로그램이다. ( 사용자 모드로 작동)

가상머신에 설치된 응용프로그램이 운영체제의 서비스를 제공받을려면 커널모드로 전환이 필요하나 가상머신이 사용자 모드로 작동하면 운영체제 서비스 제공이 어렵다 !
-> 가상화를 지원하는 cpu는 커널모드와 사용자모드 이외에 가상머신을 위한 모드인 하이퍼 바이저 모드를 따로 둔다.

  • 그렇게 되면 가상머신상에서 작동하는 응용프로그램들은 하이퍼바이저 모드로써 가상머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있다.!
profile
HelloWorld에서 RealWorld로

0개의 댓글