티스토리 뷰

반응형

https://www.youtube'.com/watch?v=R4j_hDQuBOc&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=26

 

 

꼭 알아야 하는 것들

 

커널이란 무엇인가?

운영체제의 서비스 종류(만들고 실행하는 프로그램한테 어떤 서비스를 제공해 주느냐)

시스템 콜(시스템 호출)과 이중 모드란 무엇이냐?

 

운영체제의 심장, 커널

운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나다

리눅스 = 15만줄

 

다양한 운영체제가 있다.

규모 자체도 크고, 종류도 다양하다.

그렇기에 운영체제가 제공하는 기능은 다양하다.

 

하지만, 가장 공통적이고, 가장 핵심적인 서비스는 존재한다.(스마트폰이라면 전화 기능, 문자 기능 등)

핵심적인 서비스는 

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

 

이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다.

커널은 대동소이하다.

 

그래서 운영체제를 설명할 때 대부분 커널을 설명하고 있다. 그래서 운영체제는 사실 커널이라고 할 수 있다.

 

운영체제에는 속하는데, 커널에는 속하지 않는 기능 = UI(유저 인터페이스)

그래픽 인터페이스, 커맨드 라인 인터페이스 등

사용자와 컴퓨터 간의 통로일 뿐 운영체제의 핵심 기능(커널)은 아니다.

 

 

이중모드와 시스템 호출

사용자가 실행하는 프로그램은 자원에 직접 접근할 수 있을까?

혹은, 직접 접근해도 될까?

 

자원에 직접 접근하는 건 위험하다.

일반적인 응용 프로그램은 자원에 직접 접근할 수 없다.

 

운영체제는 응용 프로그램들이 자원에 접근하려 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호

운영체제는 자원 접근을 대행하는 일종의 문지기다.

 

응용 프로그램이 하드 디스크에 접근할 때에는 운영체제한테 저장해 주세요라고 부탁을 해야 한다.

이런 자원 접근 대행은 이중 모드로서 구현 된다.

 

이중 모드

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

사용자 모드

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

커널 모드

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

사용자 모드에서 자원에 접근하는 명령어를 실행하려고 하면 오류가 발생한다.

 

이런 모드의 결정은 플래그 레지스터 안에 슈퍼바이저 플래그가 있다.

슈퍼바이저 플래그가 1일 경우 커널 모드로 실행 중

0일경우 사용자 모드라는 걸 CPU가 인식할 수 있다.

 

만약 입출력 장치에 접근해야 하는 명령어를 실행해야 한다면, 필연적으로 자원에 접근해야 하기 때문에 커널 모드로 실행이 되어야 한다.

 

 

시스템 호출

언제 커널 모드와 언제 사용자 모드로 바뀌는가?

시스템 호출을 하면 커널 모드로 전환이 된다.

 

커널 모드로 전환하여 실행하기 위해 호출한다.

일종의 소프트웨어 인터럽트다

 

커널 모드로 전환하려면 시스템 호출을 해야 한다.

시스템 호출은 운영체제마다 이미 정해져 있다.

 

https://kangtegong.github.io/self-learning-cs/system_calls/syscalls.html

 

https://kangtegong.github.io/self-learning-cs/system_calls/syscalls.html

리눅스 시스템 호출 정리 이하 문서는 리눅스의 시스템 콜(x86)을 일부 정리한 문서입니다. 시스템 호출의 이름(Name)을 클릭하면 해당 시스템 호출에 대한 자세한 정보를 안내하는 공식 페이지로

kangtegong.github.io

 

리눅스 호출 시스템 총정리

 

인터럽트와 똑같이, 시스템 호출을 하고-> 운영체제 코드 실행-> 시스템 호출 복귀

일반적으로 응용프로그램은 시스템 호출을 아주 자주 하게 된다.

 

운영체제의 핵심 서비스

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

크게 이 3가지 기능의 도움을 받으면서 실행 될 수 있다.

 

프로세스 관리

프로세스 == 실행 중인 프로그램

메모리에 적재되서 지금 실행 중인 프로그램(작업 관리자)

수많은 프로세스들이 동시에 실행

 

운영체제의 기법을 통해서, 프로세스들이 굳이 메모리에 올라와 있지 않을 수 있다(페이징, 스와핑)

 

동시다발적으로 생성/실행/삭제되는 다양만 프로세스들을 일목요연하게 관리 할 수 있어야 한다.

프로세스마다 상황이 다를 수 있다.

 

그러므로 운영체제가 어떻게 이러한 프로세스들을 일목요연하게 관리하는 방법을 배운다.

프로세스와 스레드, 프로세스 동기화, 고착상태 해결

 

자원 접근 및 할당

CPU, 메모리, 입출력 장치가 있다.

 

CPU (CPU 스케줄링 : 어떤 프로세스를 먼저, 얼마나 오래 실행할까?) - 공평하게 할당해주는 역할

메모리 (페이징, 스와핑) - 새로운 프로세스를 적재할 때, 비어있는 공간을 어떻게 찾을 것인지, 그리고 과연 메모리에 전부 다 싣는 게 효율적인지, 어떻게 해야 굳이 메모리에 적재하지 않고도 문제 없이 실행할 수 있는가)

입출력장치 - 인터럽트 서비스 루틴 (커널 영역에 적재되어 있는 코드)

 

파일 시스템 관리

파일과 폴더 또한 운영체제가 제공해주는 서비스다

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