운영체제 2 Operating System

milkbottle·2022년 11월 29일
0

OS

목록 보기
2/15

Operating System(운영 체제)

운영체제에 대한 서론

운영체제의 구성

  • GUI / batch / command line / user interfaces
    운영체제를 다룰 수 있도록 인터페이스 제공
    GUI(그래픽 방식으로 제공) CLI(커맨드같은 도스창 방식으로 제공)

  • system calls
    운영체제가 커널모드로 진입하는 시점, 권한이 있어야 실행할 수 있는 기능

  • 프로그램 실행, I/O 기능, 파일 시스템, 메모리 할당관리, 에러탐지, 보안 및 권한관리 등

User Interface Service

  • Command Line Interpreter(CLI)
    도스창에서 명령어를 통해 컴퓨터를 사용
    ex) 윈도우 명령프롬프트UNIX의 shell, LINUX의 BASH(Born Again SHell: 다시 돌아온 shell)

  • Graphical User Interface(GUI)
    텍스트만 있었던 CLI에서 그래픽을 추가
    ex) 윈도우, 맥OS

  • Touch Screen Interface
    화면을 터치하며 상호작용
    ex) 아이폰, 갤럭시

운영체제의 기능

운영체제의 기능은 어떤 것이?

  • 프로그래밍하기 편리한 환경을 제공한다
  • 운영체제에 따라 링크와 컴파일의 방법이 상이함
  • 파일을 읽거나 쓰기, 파일 시스템의 구성을 운영체제가 정함
  • 프로그램의 실행, 링크 및 컴파일 기능을 수행
  • System Call: 시스템 콜 같은 운영체제의 권한 이슈를 다룸

링커와 로더

  • 링크
    여러 소스코드들을 연결시켜 실행 가능한 로드 모듈을 만드는 과정
  • 로드
    컴퓨터 내부로 정보를 들여오거나 로드 모듈을 조기억장치로부터 주기억장치로 가져오는 과정
  • 컴파일 과정(UNIX기준)
    main.c >(링크)> main.o >(컴파일)> main
    여기서 main.c가 외부 라이브러리를 참조할 수 있음
    • Static Linking
      외부 라이브러리에서 함수를 끌어다 쓸 때 호출한 위치에 코드를 복사해서 다 때려박음
    • Dynamic Linking
      호출한 위치에서 외부 라이브러리의 주소로 점프뛰어서 실행 후 다시 복귀

    윈도우는 Dynamic Linking방식으로
    수많은 .dll(Dynamically Linked Library)로 확인 가능

    Linux는 .sa와 .so(shared library)로 존재
    컴파일 시 “-s”를 추가하면 Static Linking 방식으로 변환가능
    (Dynamic이 기본)

시스템 콜

  • 파일을 읽으려면 CPU처럼 슈퍼권한이 있어야하는데 커널모드로 진입하면 읽을 수 있음
  • 듀얼모드를 통해 운영체제는 커널모드를 부여받아 파일을 읽고 유저모드로 원복
  • 실제 c언어에서 파일을 읽는 read()함수의 파라미터
    fd: 파일의 디스크립터(추상적인 파일의 고유값)
    buf: 데이터가 저장되는 공간
    count: 읽을 파일의 크기
    ssize_t 읽은 파일의 크기
  • system call이 파일 읽기만 있는게 아니라 open, read, write, close 0~3순으로 매핑되어 있음
  • interrupt또한 timer(cpu가 스스로 잘돌아가는지 주기적 테스트), 키보드, 마우스 이런 순으로 매핑이를 인터럽트 벡터 테이블이라고 부름
  • 시스템 콜을 운영체제가 I/O에 접근하기 전 세션을 열어주는 길 뚫는 역할이라고 보면 쉬움
  • 파라미터가 필요한 시스템 콜
    일반적으로 레지스터에 매개변수를 저장 후 넘기기
    • 이는 레지스터는 크기와 개수가 정해져있기 때문에 메모리 블록에 데이터를 넣고 이 메모리 블록의 주소를 넘기는 방식
    • 메모리의 스택영역에 push 후 운영체제가 pop해가는 방식

커널의 종류

Monolithic Kernel

  • Function call
    모든 system 기능들(Protection, IPC, File System등)을 커널이 관리
  • Protection: chmod / umask / chown 등
  • IPC
    Inter Process Communication으로 프로세스 간의 데이터를 주고받는 행위
  • File System: open / read / write / close
  • 장점: 빠르고 커널의 역할별로 커뮤니케이션이 효율적
  • 단점: 유지보수하기 힘들고 커널이 무워지고 하나가 죽으면 전체가 panic
  • 비슷한 점: 절차지향 프로그래밍 언어

Micro Kernel

  • Multiple Servers
    커널에 바로 기능을 만든 것이 아니라 커널 위에 서버를 만들어 구현해 그 서버 내부에 system 기능들(Protection, IPC, File System등)을 만들고 서버를 여러 개로 나눠서 관리
  • 장점: 커널이 가볍고 서비스가 죽어도 커널 전체가 panic되지 않는다
  • 단점: 느리다, 서버의 형테로 존재하기 때문에 서버 통신에 있어서 오버헤드가 발생 가능
  • 비슷한 점: 객체지향 프로그래밍 언어

Monolithic Structure

  • MS – Dos, Traditional Unix
  • 하드웨어와 유저 사이에 권한을 담당하는 OS Kernel이 한 덩어리로 존재
  • file system, virtual memory, I/O Driver, Process Control, System Service.. 등 수많은 기능
  • 그물망처럼 연결되어 있어서 하나를 수정하면 그 옆에 있는 또 다른 기능을 수정하고 복잡함

Microkernel Structure

  • 커널을 최소화하고 기능별로 묶어서 하나가 문제가 일어나도 그 부분만 고치면 됨
  • 하지만 IPC(프로세스간 데이터 통신)을 통해 서비스가 수행되기 때문에 메시지 전송과 Context
    Switch(3장에서 배움)를 많이해서 Overhead가 급격히 증가

Layered Approach

  • 제일 가운데가 하드웨어에서 밖으로 나오면 유저 인터페이스에 가까워지는 순으로 구성
  • 개념만 나오고 실제로는 존재하지 않는 이상적인 Structure

Modular Approach

  • 필수적인 커널을 코어로 만들고 나머지를 모듈화해서 Core kernel에 add-on하는 방식
  • 서로 종속성이 없는 기능이므로 따로따로 개발 가능
  • Linux, Solaris 등이 사용

Hybrid Approach

  • 단일커널(Monolithic)과 마이크로커널의 장점을 섞은 방식
  • Mac OS, iOS, Android가 사용

    추신
    Android는 사실 OS라기보다는 플랫폼에 가까움.
    Linux OS기반으로 위에 라이브러리와 프레임워크들을 사용해 OS만든 것이 아니라 플랫폼(하나의 큰 프로그램)을 만든 것임.

Flow를 통해 커널 이해하기

  1. shell에서 ls를 치면 현재 위치한 디렉토리의 파일 리스트를 불러옴
  2. 파일을 읽어야하기 때문에 여기서 system call이 발생(File System Management)
  3. system call이 발생했으므로 운영체제는 커널모드에 들어감
  4. 권한이 생긴 운영체제는 파일을 읽을 수 있기 때문에 읽고 다시 유저모드로 복귀

0개의 댓글

관련 채용 정보