혼공 학습단/혼자 공부하는 컴퓨터구조+운영체제

혼자 공부하는 컴퓨터 구조 + 운영체제 Chapter 9

uomnf97 2024. 1. 28. 23:30

혼자 공부하는 컴퓨터 구조 + 운영체제 Chapter 9

안녕하세요! 제이덥입니다~ 저는 학부 때 공부했던 CS 기초 내용을 Wrap-Up 하기 위해 혼공학습단 11기 활동을 진행하고 있는데요. 이번주부터 운영체제에 들어갔네요. 벌써 2주밖에 안남았다니 시간이 짧다는 걸 느끼게 되네요.
이번 포스팅에서는 Chapter 9으로 운영체제가 무엇인가에 대해 다룹니다. 운영체제의 정의와 역할은 무엇인지 알고 싶다면 아래 글을 참고해주세요.
해당 도서는 제가 직접 구매하여 글을 작성한 것이며, 혼공단 11기 활동의 일환으로 학습 내용에 대한 공유 글을 작성하게되었음을 알려드립니다. 도서에 대한 자세한 내용과 활동에 대한 내용을 알고 싶은 분들은 아래 Reference에서 확인해주세요~

Chapter 6. 운영체제 시작하기

운영체제

1️⃣ 운영체제를 알아야 하는 이유

  • 운영체제란
    • 운영체제의 정의 : 실행할 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
      • 시스템 자원 : CPU, 메모리, 보조기억장치, 입출력 장치를 말하며 모든 프로그램은 실행하기 위해 이 자원이 필요함
    • 종류 : Window OS, Android OS, Mac OS, Linux, iOS
    • 특징 :
      • 운영체제도 프로그램의 일종임 ⇒ 다른 프로그램처럼 메모리에 적재되어야 함
      • 운영체제는 컴퓨터가 부팅될때 메모리 내에 커널영역(Kernel)영역에 따로 적재됨.
        • 이외의 프로그램, 즉 사용자가 이용하는 소프트웨어는 나머지 영역인 사용자 영영(User Space)에 적재되어 사용됨
      • 운영체제는 커널영역에 적재되어 사용자 영역에 적재된 프로그램들에게 자원을 할당하고 올바르게 실행되도록 도와줌
      • 올바르게 사용된다는 건?
        • 운영체제가 종료된 프로그램을 메모리에서 제거하고, 동시에 두개의 프로그램이 같은 시스템 자원에 접근할 때 순서를 정해주는 등의 프로그램의 관리자 역할을 하여 불필요한 자원의 낭비 없이, 프로그램의 충돌없이 진행되는 것을 말함.
      • 시스템 자원이 CPU, 메모리 등 여러가지로 나뉘는 것처럼. 운영체제도 자원별로 기능이 나누어져 있음

운영체제의 역할( 사진 출처 : https://dinfree.com/lecture/core/101_basic_1.html )

  • **운영체제를 왜 알아야할까?**
    • 운영체제가 가져오는 편리성 : 운영체제가 없다고 한다면 단순 계산을 하는 프로그램이더라도 이를 수행하기 위핸 메모리용 코드, CPU용 코드를 모두 작성해야함. 즉, 운영체제가 있어서 하드웨어 작동을 위한 함수를 추가로 짜주지 않아도 됨.
    • 개발자는 왜 운영체제를 알아야할까?
      • 운영체제를 알고 있다면 현재 컴퓨터 하드웨어 상태가 어떤지, 코드가 어떻게 실행됬는지, 어떤 문제를 통해 운영체제를 통해 확인할 수 있고, 이는 개발자 소양인 문제 해결력을 기르는데 도움이 됨.
      • 운영체제를 공부함으로써 하드웨어, 소프트웨어의 유기적인 흐름에 대해 알게되어 더 깊게 이해할 수 있음.
      • 운영체제에서 에러 메시지를 통해 우리에게 정보를 알려주는데, 운영체제를 공부한다면 이런 오류 메시지를 통해 문제 해결의 힌트를 얻을 수 있음.

2️⃣ 운영체제의 큰 그림

  • 운영체제의 심장, 커널
    • 커널(Kernel) : 운영체제의 핵심적인 기능 서비스를 담당하는 부분
      • ex) 자원에 접근하고 조작하는 기능, 프로그램이 안전하게 실행되게 하는 기능
    • 커널에 따라 컴퓨터 전체의 성능이 달라지게 됨.
    • 예외적으로 커널에서 사용자 인터페이스(UI:User Interface)는 제공하지 않음
    • 사용자 인터페이스(UI:User Interface)란?
      • 사용자와 컴퓨터가 상호작용할 수 있는 통로를 말함.
      • 그래픽 유저 인터페이스(GUI:Graphical User Ineterface): 화면과 같이 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
      • 커맨드 라인 인터페이스(GLI:Command Line Ineterface) : 명령어를 통해 상호작용할 수 있는 인터페이스
  • 이중모드와 시스템 호출
    • 운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지함
      • 어떻게? 응용 프로그램이 시스템 자원이 접근하도록 할 때, 운영체제를 통해서 간접적으로 접근할 수 있도록 대신 접근해서 자원을 할당 시켜줌
    • 이중 모드(dual mode) : 컴퓨터 자원을 보호하기 위해 사용하는 방식으로 CPU가 명령어를 실행하는 모드는 사용자 모드와 커널 모드로 구분하는 방식
    • 사용자 모드(User mode): 운영체제 서비스를 제공받을 수 없는 실행 모드. 일반적인 응용 프로그램이 이 모드로 접근된다.
      • 시스템 호출(System call) : 사용자 모드로 실행되는 프로그램이 커널 모드로 전환하여 운영체제 서비스를 받을 수 있게 하는 요청
      • 일종의 소프트웨어 인터럽트라고 생각하면 됨.
      • 시스템 호출의 처리 방법
        1. 하드디스크에 데이터를 저장하는 시스템 호출을 발생시켜 커널 모드 전환
        2. 커널 모드에 하드 디스크에 데이터를 저장하는 코드를 실행
        3. 하드 디스크의 접근이 끝나면 사용자 모드로 복귀
      • Ex) 디스크에 데이터를 저장하는 프로그램
    • 커널 모드(Kernel mode): 운영체제 서비스를 제공받을 수 있는 실행 모드로 커널 영역의 코드를 실행가능. CPU가 커널 모드로 명령어를 실행하면 모든 자원에 접근 가능함.
    • Dual Mode 사진 출처 : https://blog.skby.net/%EC%9D%B4%EC%A4%91-%EB%AA%A8%EB%93%9C-dual-mode/
  • 운영체제의 핵심 서비스
    • 프로세스 관리
      • 실행중인 프로그램을 프로세스(process)라고 부르는데 이러한 프로세스를 관리함
      • CPU는 한번에 한 스레드만 실행할 수 있어서, 프로세스를 조금씩 번갈아가며 실행
      • 프로세스는 다양한 상태가 존재하고, 사용하고자 하는 자원도 다양함. 따라서 운영체제는 다양한 프로세스를 일목요연하게 관리하고 실행할 수 있도록 함
      • 프로레스 동기화, 교착상태 등을 해결함.
    • 자원 접근 할당:
      • 프로세스는 실행을 위해 자원을 필요로 하는데 이러한 자원을 접근하고, 조작하여 프로세스에 필요한 자원을 할당함
      • CPU : CPU 스케줄링을 이용하여 효율적으로 CPU를 관리
      • 메모리 : 프로세스에 메모리를 할당하고, 삭제 + 메모리가 부족할 경우 이를 해결
      • 입출력 장치 : 커널 영역의 인터럽스 서비스 루틴을 통해 입출력 장치 제어
    • 파일 시스템 관리:
      • 계층 구조를 이용한 파일 시스템을 이용하여 파일들을 디렉토리로 관리
  • 가상 머신(Virtual Machine)
    • 가상 머신을 설치하면 가상 머신상 리눅스 운영체제와 그를 기반으로 여러 응용 프로그램을 설치하고 실행
    • 가상 머신은 응용 프로그램이기 때문에 사용자 모드로 작동되고, 내부 운영체제도 사용자 모드로 작동함. ⇒ 가상화를 지원하는 가상 머신을 위한 모드인 하이퍼바이저 모드를 따로 두어 운영체제의 서비스를 받을 수 있도록함.

Reference :