CS 스터디 4회차 -(1)

hi_rice·2025년 2월 13일
0
post-thumbnail

오늘은 CS 스터디 4회차

진도는 Chapter 03(1)-(3)까지.
운영체제에 대해 공부할 예정이다.

일단 운영체제의 큰 그림부터 알아보자.

운영체제는 정확히 어떤 것들을 해줄까?

그것을 알기 위해선

커널, 운영체제의 서비스, 시스템콜과 이중모드 를 알아야 한다.

운영체제라고 하는 것은 아주 방대한 프로그램이다.
또 다양한 종류의 운영체제들이 많은데, 스마트폰에서 사용되는 운영체제도 있고, 서버에서 사용되는 운영체제도 있다.

이렇게 운영체제는 규모도 크고 종류도 다양하기 때문에 운영체제가 프로그램에게 제공해주는 기능도 다양하다.

같은 스마트폰이라고 할 지라도 안드로이드와 아이폰이 제공해주는 기능이 다른 것을 예로 들 수 있다.

하지만 제공해주는 서비스가 다를지라도 핵심적인 기능은 모두 같다고 말해도 무방한 게 전화가 안 되는 스마트폰? 인터넷이 안 되는 스마트폰? 같은 건 존재하지 않기 때문이다.

이렇게 운영체제의 핵심적인 부분을 담당하는, 운영체제 안에 있는 한 부분을 마치 자동차의 엔진이나, 사람의 심장 같은 핵심적인 부분.

이것을 커널 이라고 한다.

📌 물론, 커널에 속하지 않는 부분도 있다.
예를 들어, 유저 인터페이스.

유저 인터페이스는 사용자와 컴퓨터 간의 상호작용을 위한 통로지만 운영체제의 핵심적인 부분은 아니기 때문에 커널에 속한다고 보긴 어렵다.

그렇다면 커널이 제공하는 기능들, 내가 만들고 실행하는 프로그램은 커널로부터 어떤 식으로 도움을 받을 수 있을까?

사용자가 실행하는 프로그램, 예를 들어서 메모장이라던가, 크롬이라던가, 하는 일반적인 프로그램들이 자원에 직접적으로 접근 할 수 있을까?

자원에는 메모리가 있을 수도 있고, CPU, SSD 등 여러가지가 있다.

그렇다고 생각했을 때 일반적인 프로그램이 자원에 직접적으로 접근 해도 될까? 절대 안 된다.

자원에 직접적으로 접근을 하면 충돌을 일으킬 수도 있고, 임의로 메모리를 삭제하거나 덮어씌워 버려 데이터를 날려버릴 수도 있기 때문에 위험하다.

그래서 운영체제는 이런 일반적인 응용 프로그램들이 자원에 접근하려고 할 때 자신을 통해서만 접근 할 수 있도록 해 자원을 보호한다.

만약 메모장이 SSD에 접근하고 싶다면 운영체제에 부탁을 하게 되는 것.
운영체제에 부탁을 한다는 말은 운영체제의 코드를 실행한다고 봐도 된다.

이렇게 운영체제는 문지기 역할 같은 거라고 볼 수 있는데,
이 역할은 이중모드로 구현이 된다.

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

📘 사용자 모드

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

📘 커널 모드

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

근데, 여기서 언제 사용자 모드로, 언제 커널모드로 바뀌는지 궁금하다.

그 때 알아야 할 게 시스템 호출이다.

시스템 호출을 하면 사용자 모드에서 커널 모드로 전환이 된다.

시스템 호출도 인터럽트이다. 소프트웨어 인터럽트.
특정 명령 실행을 통해서 인터럽트를 걸어주는 거다.

그래서 시스템 호출을 하게 되면 운영체제의 서비스를 받을 수 있는 커널 모드로 전환이 된다라고 보면 된다.

커널 모드 전환 = 시스템 호출

이라고 기억해두자.

시스템 호출, 시스템 콜은 일종의 소프트웨어 인터럽트라고 바로 위에서 말했다.

이게 또 인터럽트이기 때문에, 시스템 호출이 처리되는 방식은 하드웨어 인터럽트를 처리하는 방식과 아주 유사한데.

예를 들어, 일반적으로 실행하는 응용 프로그램을 실행하는 과정에서 자원에 접근해야 된다.

하드디스크에 접근해야 한다라고 하면 시스템 호출을 하게 되고 하드디스크에 접근하는 코드를 실행하게 되고, 다시 기존의 실행으로 돌아오게 된다.

인터럽트 서비스 루틴, 즉 하드웨어에 접근하는 코드를 운영체제에서 실행한다고 보면 된다.

그래서 쭉 실행을 하다가 어떤 자원에 접근해야 되는 시스템 호출이 이루어질 경우에는 운영체제의 코드를 실행해주고 다시 시스템 호출로 복귀해서, 다시 사용자 모드로 실행해 나간다라고 보면 된다.

적어놓고 보니 말이 좀 어려운데, 우리가 일반적으로 실행하는 프로그램을 이 과정을 아주 빈번하게 거치게 된다.

왜냐. 우리는 크롬으로 검색도 좀 했다가, 유튜브도 좀 봤다가, 옵시디언 켜서 메모도 좀 해주고, 그러다 게임도 하고 다시 크롬으로 넘어오기도 하기 때문이다.

이렇게 운영체제의 큰 그림에 대해 공부해 보았다.

다음시간엔 프로세스와 스레드에 대해 알아보도록 하자.🙃🙃

CS 어렵다!!!!!!!!!!

0개의 댓글

관련 채용 정보