본문 바로가기
IT/OS

[OS] 운영체제 기초(운영체제의 역사/구조, 하드웨어 구조, 인터럽트), 인프런 - '비전공자를 위한 운영체제' 수강 후기

by 퐁시냥 2022. 1. 11.

운영체제는 학부생 시절 공부를 했지만(공룡책), 수업시간에 맨날 잤던 기억 + 벼락치기 기억 밖에 없어서 

다시 전체적으로 공부해보려 인프런 강의를 수강했다. 

 

제목은 '비전공자를 위한 운영체제' 인데, 비전공자 뿐만 아니라 개발자 분들, 실무자도 한 번 정리하는 느낌으로 들으면 좋을 것 같다. 

그동안 어렴풋이 알고 있었던 전공 지식들을 쉽게 이해할 수 있어서 좋았다. 

 

현재는 섹션 0만 들었는데, 총 10개의 섹션으로 구성되어 있고 강의 시간은 총 3시간 23분으로 가볍게 짬내서 들으면 좋을 것 같다. 

까먹을까봐 적는 강의 내용 

비전공자를 위한 운영체제

  • 강의 목표 : 운영체제의 원리 이해 
    • 운영체제의 개념
    • 프로그램, 프로세스, 쓰레드
    • 동기화
    • 메모리
 

비전공자를 위한 운영체제 - 인프런 | 강의

이 강의를 통해 모든 개발자들이 필수로 알아야하는 운영체제의 원리를 알 수 있습니다., 개발자의 필수 지식 운영체제를 배워서뿌리 깊은 나무가 되어 봐요 🌳 강의 주제 📖 [임베딩 영상] 주

www.inflearn.com


섹션 0. 운영체제 들어가기

01강. 운영체제 개요

  • 운영체제가 하는 일
    1. 프로세스 관리
      1. 여러 프로세스들이 동시에 실행됨(ex. 롤, 크롬, 지니 동시에 실행)
    2. 메모리 관리
      1. 모든 프로그램은 메모리에 올라와서 실행됨.
      2. 여러 프로그램을 메모리에서 동시에 실행하기 위하여 운영체제가 관리.
    3. 하드웨어 관리
      1. 사용자가 하드웨어에 직접 저장하지 못하도록 막음
      2. 운영체제가 판단하여 HDD의 적절한 위치에 저장
      3. 사용자의 악의적인 공격, 하드디스크의 특정 영역에 다른 중요데이터가 있을 수 있음.
    4. 파일 시스템 관리

 

02강. 운영체제의 역사

  • 1940년도 : 애니악(1943년 ~)
    • 세계에서 가장 큰 전자 계산기
    • 종이에 프로그래밍 후 스위치, 배선 연결
    • 30톤 : 진공관 + 논리회로
    • 결과 출력은 펀치카드, 매우 느렸음
    • HW 비용이 비쌌으므로 어떻게하면 CPU를 많이 사용할 수 있을까 고민
  • 1950년대 초반
    • 직접회로(IC) : 진공관 + 전선 = 논리회로 아주 작은 크기로 만듦.
    • CPU, 메모리는 있지만 키보드, 모니터는 없었음.
    • 입력 : 펀치카드 → 결과 출력 : 라인 프린터
  • 1950년대 중후반
    • 기존
      • 프로그래머 펀치카드로 프로그래밍 → 오퍼레이터가 컴퓨터(CPU)에 직접 카드를 넣음 → 결과를 다시 프로그래머에게 전달
      • 오퍼레이터의 오버헤드가 너무 컸음
      • 컴퓨터의 처리 속도보다 프로그래머 → 오퍼레이터 시간이 더 오래 걸렸음.
    • 변경 : 싱글스트림 배치 시스템
      • 프로그래머 펀치카드로 프로그래밍 여러개 → 오퍼레이터가 컴퓨터(CPU)에 직접 카드를 넣음 → CPU에서 순서대로 결과 처리 → 결과 프로그래머에게 한 번에 전달
      • CPU 사용성을 더 높이기 위해서 고민을 함. → 입출력 관리자를 만듦(입출력 도중에도 CPU가 연산을 처리할 수 있도록)
      • 입력의 경우에는 CPU 가 입력이 완료될 때까지 기다려야 하는 경우가 있어 사용률이 떨어짐
      • 출력은 입출력 관리자(IO Device Controller)를 통해 바로 출력 가능
  • 1960년대
    • 시분할 시스템 : 싱글스트림 배치 시스템 한계 극복
      • 메모리에 여러 프로그램을 올려 놓고 시간을 분할하여 빠르게 돌아가면서 실행 → 동시에 여러 프로세스가 실행되는 것 처럼 보임
      • 동시에 여러 사용자가 사용할 수 있음(단말기 : 터미널) : 왜냐하면 컴퓨터가 비쌌기 때문에
      • 여러 사용자가 한 컴퓨터에 개인 정보를 저장 → 이 때문에 파일시스템 등장
    • UNIX : 멀티 프로그래밍, 다중 사용자, 파일 시스템을 구현한 운영체제
    • 문제점
      • 메모리 침범 이슈
      • 메모리 주소 이슈 : 기존 싱글스트림 배치 시스템에서는 한 메모리에 하나의 프로세스가 실행되었음. 이제는 어느 메모리에서 실행되는 지 모름 → ‘베이스 레지스터'를 추가하여 프로그램의 시작주소 저장 → 모든 프로그램은 0번지에서 실행된다고 가정
  • 1970년도 이후
    • 개인용 컴퓨터의 시대 : 컴퓨터의 가격이 싸짐
      • 매킨토시 : GUI 도입으로 인기를 얻음
      • MS-DOS
  • 결론 : CPU 사용률, 비용절감을 위한 노력 → 오늘 날의 운영체제 탄생

 

 

03강. 운영체제의 구조

운영체제 구조

  • 커널(kernel) : 프로세스, 메모리, 저장장치 관리
  • 인터페이스 : 사용자는 커널에 직접접속 불가, 인터페이스를 통해서 접속 가능
    • 인터페이스 : GUI, CLI
      • GUI(Graphic User Interface) : 그래픽으로 된 인터페이스, MacOS, Winodws
      • CLI(Command-Line Interface) : 텍스트를 이용해 커널과 상호작용, Unix, Linux
  • 시스템콜 : 어플리케이션은 ‘시스템 콜’을 통해서 커널에 접근 가능
    • 프로세스 제어, 파일 조작, 장치 조작, 정보 유지보수, 통신과 보호
    • User Mode와 Kernel Mode로 나뉨open() 시스템 콜을 호출한 사용자 응용의 처리
    • open() 시스템 콜을 호출한 사용자 응용의 처리
    • 커널에서 제공하는 Write 함수를 이용
    • 권한수준 사용자 공간(user space, x86 링3, ARM 사용자 모드(User Mode))에서 실행. 응용 프로그램에서의 리눅스 커널의 장치 드라이버 호출
    char gbuff[100];
    
    int main(int argc, char*argv[])
    {
       int leng;
       int fp;
    
        fp = open("/dev/mydrv", ....);// mydrv_open 호출    gbuff[0] = 10;
        gbuff[1] = 20;
        leng = 2;
        write(fp, (void*) gbuff, leng);// mydrv_write호출    close(fp);// mydrv_release호출return 0;
    }
    
  • 드라이버 : 하드웨어와 커널의 인터페이스
    • 커널이 여러 HW에 맞는 프로그램을 제공하기는 힘듬
    • 드라이버를 제조사에서 제작하는 것이 일반적
    • 키보드, 마우스는 커널에 포함되어 있음
    • 그래픽카드, 타블렛 등 복잡한 장치들은 디바이스 드라이버를 설치해서 사용해야 함

 

04강. 컴퓨터 하드웨어와 구조

  • 폰 노이만 구조 : 프로그램 내장 방식
    • 예전에는 애니악과 같이 하드웨어로 프로그램을 만들어서 사용하였기 때문에, 프로그램이 달라질 때마다 매번 스위치와 배선을 다시 조정
    • 버스 : 데이터를 전달하는 통로
      • CPU ↔ MEM(RAM)
  • 컴퓨터 하드웨어
    • 메인보드 : 다른 하드웨어를 연결하는 장치
      • 장치 간에 데이터를 전송하는 건 메인보드의 버스가 담당
      • 구성
        • CPU
        • MEM
        • HDD
        • Grapic Card
        • 출력단자 - Monitor
        • USB 단자 - 마우스, 키보드
        • 사운드 단자 - 스피커
  • CPU 구조
    • CPU(Central Processing Unit) : 중앙 처리 장치
    CPU구조
    CPU 구조

    • 장치
      • 산술논리 연산장치(Arithmetic and Logic Unit, ALU) : 데이터 연산 담당
      • 제어 장치(Control Unit) : 모든 장치들의 동작을 지시하고 제어
      • 레지스터 : CPU 내에 계산을 위해 임시로 보관(변수)
        • 프로그램 카운터
        • 메모리 주소 레지스터
        • 메모리 버퍼 레지스터
        • 명령어 레지스터
  • 메모리 종류
    메모리종류
    메모리 종류
     
    • RAM(Random Access Memory)
      • 랜덤으로 데이터를 읽어도 저장된 위치와 상관 없이 읽는 속도가 같음.
      • 전력이 끊기면 데이터를 잃어버림, 메인메모리로 사용
    • ROM(Read Only Memory)
      • 전력이 끊겨도 데이터를 계속 보관
      • 데이터를 한 번 쓰면 수정이 불가능
      • 부팅과 관련된 BIOS를 저장하는데 주로 쓰임

 

05강. 컴퓨터의 부팅과정

  1. 전원
  2. ROM에 저장된 BIOS 실행
    1. BIOS : 전원, CPU, MEM, 키보드, 마우스, 하드디스크 등 주요 하드웨어에 이상이 없는지 확인 → 이상이 있다면 오류음과 함께 부팅 불가
    2. 이상이 없다면 하드디스크에 있는 마스터 부트 레코드에 저장된 부트로더를 메모리로 가져와서 실행(ex. Windows Boot Manager)
  3. 운영체제 - Windows / Linux 실행
    1. 모든 응용프로그램은 메모리에 올라와서 운영체제가 관리

 

06강. 인터럽트

  • CPU → 입출력 관리자(주기적으로 체크) : 폴링(Polling) 방식 / 지속적으로 확인해야하므로 성능이 좋지 않음.
  • 인터럽트 : 폴링 방식의 단점을 해결한 방식, 비동기적으로 동작
    1. CPU는 입출력 관리자에게 명령을 내리고, 다른 작업을 계속함
    2. 입출력 관리자는 입출력이 완료되었을 때 CPU에게 알려줌
    3. CPU는 인터럽트 서비스 루틴(ISR) 실행인터럽트 서비스 루틴 - 특정 인터럽트가 들어오면, 그 인터럽트를 실행해 줌
    4.  
      인터럽트서비스루틴
      인터럽트 서비스 루틴
    • 종류
      • 하드웨어인터럽트-소프트웨어인터럽트
        하드웨어 인터럽트와 소프트웨어 인터럽트
      • 하드웨어 인터럽트 : ex. 입출력
        • 기계검사 인터럽트 - 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서
        기계적인 문제가 발생한 경우
        • 외부 인터럽트 - 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
        • 입출력 인터럽트 - 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우
        • 프로그램검사 인터럽트 - 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인
        명령 수행과 같은 프로그램의 문제가 발생한 경우
      • 소프트웨어 인터럽트(SWI, Software Interrupt) : 사용자 프로그램에서 발생한 인터럽트,이를 트랩(trap) 또는 **예외(exception)**라 부릅니다.
        • 유효하지 않은 메모리에 접근
        • 0으로 나누는 명령어 등
      • 프로그램 실행 중 프로그램 상의 처리 불가능한 오류나 이벤트를 알리기 위한 경우 발생하는데, 이를 트랩(trap) 또는 예외(exception)라 부릅니다.
        • 유효하지 않은 메모리에 접근
        • 0으로 나누는 명령어 등
    • 우선순위
      • 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요
        1. 전원 이상(Power fail)
        2. 기계 착오(Machine Check)
        3. 외부 신호(External)
        4. 입출력(I/O)
        5. 명령어 잘못
        6. 프로그램 검사(Program Check)
        7. SVC(SuperVisor Call)
      • 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선 순위가 높고,
      • 일반적으로 높고 내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다.
  • 참고
    • PCB(Process Control Block) : 커널의 데이터 영역에 존재하며 각각의 프로세스마다 고유의 PCB가 있다.인터럽트 발생 시 프로세스의 어느 부분이 수행중이었는지를 저장한다.(수행중이던 memory 주소, 레지스터값, 하드웨어 상태 ...)

댓글