코딩하는 해달이

[운영체제] 3주차 본문

학교 공부/운영체제

[운영체제] 3주차

코딩하는 해달 2023. 3. 20. 11:49

컴퓨터 시스템과 운영체제

컴퓨터 시스템의 범위

컴퓨터 시스템의 계층

  • 응용프로그램 층
  • 운영체제 층
  • 컴퓨터 하드웨어 층

컴퓨터 시스템의 계층

  • 사용자는 응용프로그램과 GUI/도구프로그램을 통해 컴퓨터 활용
  • 하드웨어는 모두 운영체제의 배타적 독점적 지배 받음
  • 사용자나 응용프로그램의 하드웨어에 대ㅐ한 직접접근 불허

컴퓨터 시스템의 계층

  • 사용자가 하드웨어에 대해 몰라도 컴퓨터를 사용할 수 있도록 함
  • 응용프로그램과 하드웨어 사이의 중계
    • 위로는 응용프로그램과 아래로는 하드웨어와의 인터페이스

컴퓨터 하드웨어 구성

컴퓨터 하드웨어 설명

CPU

  • 프로그램 코드를 해석하여 실행하는 중앙처리장치
  • 컴퓨터의 가장 핵심
  • 전원이 공급될 때 작동, 메모리에 적재된 프로그램 실행

메모리

  • CPU에 의해 실행되는 프로그램 코드와 데이터가 적재되는 공간
  • 반도체 메모리 RAM(현재는 전부 반도체)
  • 프로그램은 실행되기 위해 반드시 메모리에 적재되어야 함

캐시 메모리

  • 병목 현상을 해소하기위해 등장
  • ex)고속도로 톨게이트
  • 프로그램은 실행되기 위해 반드시 메모리에 적재되어야 함

장치들

  • 키보드, 프린터, 스캐너 등

버스

  • 하드웨어들이 데이터를 주고받기 위해 0과 1의 디지털 신호가 지나가는 여러 가닥의 선을 다발로 묶어 부르는 용어
  • 버스의 종류
    • 주소 버스 - 주소신호가 지나다니는 버스
    • 데이터 버스 - 데이터 신호가 지나다니는 버스
    • 제어 버스 - 제어 신호가 지나다니는 버스

주소

  • 메모리, 입출력장치나 저장장치 내에 있는 저장소들에 대한 번지
  • 0번지에서 시작하는 양수
  • 주소버스는 주소 값이 전달되는 여러 선의 다발
  • CPU는 메모리나 입출력 장치에 값을 쓰거나 읽을 때 반드시 주소를 발생시킴

목적에 따라 버스 구분

  • 시스템 버스
    • 빠른 하드웨어들 사이에 데이터 전송
    • like 고속도로
  • 입출력 버스
    • 상대적으로 느린 입출력 장치들로부터 입출력 데이터 전송
    • like 일반도로

I/O controllers & control circuit

  • 입출력 장치를 제어하기 위한 여러 하드웨어
    • 입출력 장치에게 명령 하달
    • 메모리 - 입출력장치, CPU - 입출력 장치 사이 데이터 전달 중계

현대 PC의 구조

CPU와 메모리의 관계

CPU

  • 능동적 소자. 메모리 액세스 시 주소 발생

32비트 CPU, 32비트 운영체제, 32비트 컴퓨터란?

  • CPU에 32개의 주소선이 있음
    • CPU의 액세스 범위 : 2^32개의 서로 다른 주소
    • CPU가 최대 액세스 할 수 있는 메모리 크기 : 4GB
    • 한 번지의 공간이 1bite → 2^32bite = 4GB

  • CPU에 입출력되는 32개의 데이터 선이 있음
    • 한번에 32비트 읽고 쓰기 가능

CPU 기계 명령(instruction)

CPU 명령

  • CPU가 해석하고 실행할 수 있는 기계 명령
    • C 언어나 자바 프로그램 소스 코드와 다름
    • CPU를 설계하는 기업이 명령어들, 개수, 형태 등을 결정
    • CPU의 명령 개수는 수십개~수백개
    • CPU마다 명령 이름, 기계어 코드, 크기, 개수 등이 다름
    • CPU 사이에 명령들의 호환성 없음
  • CPU 명령 사례

CPU의 일생(Life Cycle) - 명령 처리 과정

CPU 레지스터들

  • PC(Program Counter) - 다음에 실행할 명령의 메모리 주소 저장
  • IR(Instruction Registers) - 현재 실행하기 위해 메모리로부터 읽어 온 명령 저장
  • SP(Stack Pointer) - 스택의 톱 메모리 주소 저장
  • 데이터 레지스터들 - 연산에 사용되거나 사용 될 데이터들을 저장
  • 상태 레지스터 - cpu의 상태 정보나 인터럽트 금지 등의 제어 정보 저장
  • 기타 여러 레지스터 - 페이지 테이블이 저장된 메모리 주소를 가리키는 레지스터 등

CPU 명령 사이클 - CPU의 일생

  • CPU가 하나의 명령을 실행하는 과정. CPU는 전원이 켜진 후 단순하게 명령 사이클 반복

스택(Stack)은 어디에 있는가?

프로그램이 실행되기 위해 운영체제에 의해 할당되는 4공간

  • 코드(code) 공간 – 프로그램 코드 적재
  • 데이터(data) 공간 - 전역 변수들이 적재되는 공간
  • 힙(heap) 공간 – 프로그램에서 동적 할당받는 공간
  • 스택(stack) 공간 – 함수가 호출될 때 매개변수, 지역변수 등 저장

스택

  • 메모리의 일부를 스택으로 사용하도록 할당된 공간
    • 스택이라는 별도의 하드웨어 메모리가 있는 것 아님
  • 운영체제는 각 프로그램에게 스택 공간 할당
  • CPU의 SP 레지스터는 현재 CPU가 실행중인 프로그램의 스택 꼭대기 주소 를 가리킴
  • 스택에 저장되는 내용
    • 함수의 지역 변수들 
    • 함수가 호출될 때 전달받은 매개변수 값들
    • 함수가 실행된 후 돌아갈 주소
    • 함수가 의도적으로 저장해 두기 위한 값

스택과 메모리

컨텍스트(Context)

컨텍스트(문맥이라고도 표현)

  • 한 프로그램이 실행 중인 일체의 상황 혹은 상황 정보
    • 메모리
    • CPU 레지스터들의 값
  • 축소 정의
    • 현재 CPU에 들어 있는 레지스터의 값들

컨텍스트 스위칭

  • 발생
    • CPU가 현재 프로그램의 실행을 중지하고 다른 프로그램을 실행할 때
    • 여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것
  • 과정
    • 현재 실행중인 프로그램의 컨텍스트를 메모리에 저장
    • 새로 실행시킬 프로그램의 저장된 컨텍스트를 CPU에 복귀

프로그램 A에서 프로그램 B로 컨텍스트 스위칭(시간날때 보세요)

멀티 코어 CPU(Multi-core CPU)

2001년 IBM에 의해 PowerPC라는 멀티코어 CPU 개발

  • CPU 내부에 2개의 프로세서(processor) 포함
  • 2개의 프로그램을 동시에 실행
  • 코어는 완벽한 처리기(과거 개념의 CPU)

컴퓨터 시스템의 계층 구조와 운영체제 인터페이스

컴퓨터 시스템 계층 구조

컴퓨터 시스템 계층

  • 사용자
  • 응용프로그램
  • 운영체제
    • 커널 코드
    • 디바이스 드라이버
  • 하드웨어

컴퓨터 시스템이 계층 구조로 설계된 이유

계층간 독립성 확보(칸막이가 있다고 생각)를 위해

  • 사용자
    • 운영체제나 하드웨어에 대해 몰라도 응용프로그램으로 컴퓨터 활용
  • 응용프로그램
    • 컴퓨터 하드웨어의 타입이나 구조, 제어방법을 몰라도 개발 가능
    • 운영체제에 요청하여 해결
    • 컴퓨터 하드웨어가 바뀌어도 응용프로그램을 다시 작성할 필요 없음(다시 작성해야하나, 운영체제가 자동으로 처리)
  • 운영체제
    • 운영체제는 장치 관련된 모든 작업을 디바이스 드라이버에게 요청
    • 응용프로그램과 하드웨어 사이의 인터페이스

왜 운영체제가 필요한가?

운영체제가 없다면

  • 응용프로그램이나 사용자가 직접 하드웨어를 제어해야 함
  • 하드웨어에 대한 지식이 필요하며, 충돌, 관리, 보안의 문제 발생

실례

  • 프로세스 관리
  • 메모리 관리
  • 장치 관리
  • 파일시스템 관리
  • 입출력 관리

운영체제의 필요성

  • 자원에 대한 충돌 해결, 성능 최적화, 사용자 시스템 사용 효율화

직원이 없는 은행과 직원 있는 은행 비교

운영체제와 응용프로그램 사이의 관계

응용프로그램

  • 워드, 웹브라우저 등, 사용자가 컴퓨터를 활용하도록 작성된 다양한 프로그램들

응용프로그램에 대한 운영체제의 역할

  • 응용프로그램이 직접 하드웨어를 다루지 못하도록 차단
    • 운영체제가 하드웨어를 완벽히 독점 장악
    • 이유 : 응용프로그램들 사이의 하드웨어 사용 충돌을 막기 위함
  • 응용 프로그램이 하드웨어를 사용하고자 할 때
    • 반드시 운영체제에게 요청 → 운영체제가 대신하여 하드웨어 조작
    • 유일한 요청 방법 - 시스템 호출(system call)
  • 응용프로그램과 하드웨어 사이의 인터페이스
  • 응용프로그램들의 실행 순서 제어
  • 응용프로그램들 사이의 통신 중계

운영체제와 사용자의 관계

사용자는 응용프로그램을 통해 컴퓨터 활용

  • 탐색기, 메모장 등

사용자에 대한 운영체제의 역할

  • 사용자가 하드웨어에 관한 지식이 없어도 컴퓨터 다루기 용이
  • 사용자가 하드웨어를 설치하거나 변경하는 것에 도움
  • 사용자에게 컴퓨터 시스템을 사용할 편리한 인터페이스 제공
  • 컴퓨터의 사용을 돕는 여러 도구 응용프로그램 제공
  • 사용자 계정 관리
  • 사용자의 컴퓨터 사용 시간 계산, 과금 처리 등

운영체제와 하드웨어의 관계

하드웨어를 제어하는 것은 전적으로 운영체제의 몫

  • 응용프로그램에서 printf(“hello”)
  • 응용프로그램에서 scanf()

운영체제

  • 사용자/응용프로그램과 하드웨어 사이의 중계자
  • 하드웨어 제어는 전적으로 운영체제의 기능
    • 하드디스크에서 파일을 읽거나 쓰기
    • 마우스의 클릭
    • 키보드 입력 받기
    • 네트워크를 통한 데이터 전송 혹은 수신
    • 디스플레이에 텍스트나 이미지, 그래픽 등 출력

운영체제의 전체 기능

프로세스와 스레드 관리

파일 관리 혹은 파일 시스템 관리

장치 관리

사용자 인터페이스

네트워킹

보호 및 보안

운영체제의 구성 요소와 커널

운영체제 구성

운영체제 = 커널 + 툴 + 디바이스 드라이버

  • 커널(kernel)
    • 운영체제의 핵심 부분, 좁은 의미의 운영체제
    • 부팅 후 메모리에 상주하는 코드와 데이터
    • 운영체제의 핵심 기능 모두 구현 
    • CPU, Memory, MMU 등 컴퓨터 자원을 직접 제어하고 관리하는 코드와 자료 구조들 
    • 커널 코드는 함수들의 집합
    • 커널 기능을 이용하려면 응용프로그램은 반드시 시스템 호출 사용
  • 도구(tool) 소프트웨어와 GUI
    • 사용자가 컴퓨터를 편리하게 사용할 수 있도록 제공하는 툴 소프트웨어 혹은 툴 응용프 로그램 
    • Windows 경우, 바탕화면 GUI, 탐색기, 명령창, 작업 관리자, 제어판 등 
    • 리눅스 경우, 쉘, 로그인 프로그램
  • 디바이스 드라이버(device driver)
    • 장치를 직접 제어하고 입출력하는 소프트웨어 
    • 장치마다 전담 디바이스 드라이버 있음 
    • 일반적으로 장치 제작자에 의해 작성되어 배포됨

운영체제 커널 인터페이스 : 시스템 호출과 인터럽트

커널이 제공하는 2개 인터페이스 : 시스템 호출과 인터럽트

  • 응용프로그램과 하드웨어 사이의 중계 역할

시스템 호출(system call)

  • 커널과 응용프로그램 사이의 인터페이스
  • 응용프로그램에서 커널 기능을 사용할 수 있는 유일한 방법 
  • 시스템 호출 라이브러리를 통해 다양한 시스템 호출 함수 제공 
    • 시스템 호출 라이브러리는 운영체제 패키지에 포함됨 
    • 예) 파일 읽기, 메모리 할당, 프로세스 정보 보기, 프로세스 생성 등

운영체제 커널 인터페이스 - 인터럽트

인터럽트(interrupt)

  • 커널과 하드웨어 장치 사이의 인터페이스
  • 장치들이 입출력 완료, 타이머 완료 등을 CPU에게 알리는 하드 웨어적 방법
    • 인터럽트를 알리는 하드웨어 신호가 직접 CPU에 전달 
  • 인터럽트가 발생하면 
    • CPU는 하는 일을 중단하고 인터럽트 서비스 루틴 실행 
    • 인터럽트 서비스 루틴은 대부분 디바이스 드라이버 내에 있음 
    • 예) 키를 입력하면 커널의 키보드 인터럽트 서비스 루틴 실행, 키를 읽어 커널 버퍼에 저장 
    • 인터럽트 서비스 루틴은 커널 영역에 적재
    • 인터럽트 서비스 루틴의 실행을 마치면 하던 작업 계속 
  • 인터럽트 활용 
    • 운영체제가 장치에게 지시한 입출력 작업의 완료, 예고 없는 네트워 크 데이터의 도착, 키보드나 마우스의 입력, 부족한 배터리 경고 등 장치와 관련된 모든 이벤트 처리

커널과 시스템 호출

응용프로그램의 자원 접근 문제

오늘날 운영체제는 다중프로그래밍 운영체제 

  • 다수의 응용프로그램이 한 컴퓨터에서 동시에 실행 

문제 

  • 응용프로그램이 직접 컴퓨터 자원에 접근하면 충돌과 훼손 발생 
    • 다른 응용프로그램이 적재된 메모리 훼손 가능 
    • 다른 응용프로그램이 만든 파일 삭제 및 훼손 가능 
    • 응용 프로그램이 커널이 적재된 영역 훼손 가능 

해결 방안 

  • 응용프로그램의 자원 접근 불허 
    • 자원에 대한 모든 접근은 커널에만 부여 

구체적인 해결 방법

  1. 메모리 공간을 사용자 공간과 커널 공간으로 분리 
    • 응용프로그램은 사용자 공간에 적재, 커널은 커널 공간에만 적재 2) CPU의 실행 모드를 사용자 모드와 커널 모드로 분리 
  2. 응용프로그램은 사용자 모드에서만 실행, 커널 코드는 커널 모드에서만 실행 
    • 사용자 공간에서 커널 공간의 코드를 직접 접근하지 못하게 하기 위해 
    • 사용자 모드에서 커널 코드를 접근하면 응용프로그램 강제 종료 
  3. 응용프로그램이 커널 기능을 이용하고자 할 때, 시스템 호출을 이용해서만 커널 코드 이용

사용자 공간과 커널 공간

운영체제는 컴퓨터 메모리를 두 공간으로 분리

  • 사용자 공간(user space) : 모든 응용프로그램들이 나누어 사용하는 공간
    • 응용프로그램들이 적재되는 공간 
  • 커널 공간(kernel space) : 커널만 사용할 수 있는 공간 
    • 커널 코드, 커널 데이터 등 커널에 의해 배타적으로 사용되는 공간
    • 디바이스 드라이버 포함

분리 이유

  • 커널 코드와 데이터를 악의적인 응용프로그램이나 코딩 실수로부터 지키기 위함

사용자 공간 크기의 의미

사용자 공간 크기 

  • 한 응용프로그램의 최대 크기 결정 
    • 프로그램 코드 + 데이터(전역변수) + 힙(동적할당) + 스택 합친 크기 
    • 예) 32비트 Windows 운영체제에서 사용자 공간 2GB란 → 응용프로그램을 2GB 크기 이상 개발할 수 없음

사용자 공간의 주소 범위

  • 응용프로그램은 운영체제가 설정한 사용자 공간의 주소 범위를 넘어설 수 없음 
    • 예) 32비트 Windows 운영체제에서,
      응용프로그램은 0~7FFFFFFF 범위의 주소를 넘어 액세스하면,
      바로 종료(심각한 오류)

주소 공간은 가상 주소 공간

의문 해결

  • 사용자 공간의 충돌 해결) 가상 주소 공간을 물리 메모리에 매핑 
    • 각 응용프로그램의 가상 주소 공간을 물리 주소 공간으로 매핑 
      • 매핑 테이블은 운영체제가 소유하고 관리 
    • 물리 메모리를 여러 응용프로그램의 사용자 공간이 나누어 사용 
      • 실제 각 응용프로그램은 사용자 공간의 일부만 사용 
    • 커널 공간 역시 물리 메모리에 매핑 
      • 각 응용프로그램의 매핑 테이블에 기록 
      • 커널 공간에 대한 매핑 테이블 부분을 모든 응용프로그램에서 동일
  • 물리 메모리가 작은 경우에 대한 해결) 물리 메모리가 부족하면 운영체제는 물리 메모리를 하드 디스크에 저장하여 물리 메모리의 빈 영역 확보(가상 메모리 기법)

사용자 모드와 커널 모드

CPU는 사용자 모드와 커널 모드 중 한 모드로 실행

  • CPU 내부에 모드 상태를 나타내는 ‘모드 레지스터’ 있음
  • 사용자 모드(user mode)
    • CPU의 모드 비트 = 1
    • CPU는 사용자 공간에 있는 코드나 데이터를 액세스하는 중 
    • CPU의 커널 공간 접근 불허 -> 응용프로그램으로부터 커널영역 보호 
    • 특권 명령(privileged instruction) 실행 불허 
    • 특권 명령 – 입출력 장치 등 하드웨어나 시스템 중단 등 시스템 관련 처리를 위해 설계된 특별 한 명령 
  • 커널 모드(kernel mode, supervisor mode) 
    • CPU의 모드 비트 = 0 
    • CPU가 커널 공간에서 실행하는 중, 혹은 사용자 코드를 실행하는 중 
    • 특권 명령 사용 가능

사용자 모드에서 커널 모드로 전환

사용자 모드에서 커널 모드로 전환하는 경우

  • 오직 2 가지 경우 - 시스템 호출과 인터럽트 발생

시스템 호출

  • 시스템 호출을 실행하는 특별한 기계 명령에 의해 진행 
    • 예) int 0x80/sysenter/trap/syscall 등 CPU마다 다름
  • 기계 명령이 CPU의 모드 비트를 커널 모드로 전환

인터럽트

  • CPU가 인터럽트를 수신하면 커널 모드로 자동 전환 
    • 인터럽트 서비스 루틴이 커널 공간에 있기 때문 
  • CPU는 인터럽트 서비스 루틴 실행 
  • 인터럽트 서비스 루틴이 끝나면 CPU는 사용자 모드로 자동 전환

사용자 모드와 커널 모드 비교

특권 명령

특권 명령

  • 입출력 장치로부터의 입출력(I/O), 시스템 중단, 컨텍스트 스위칭, 인터럽트 금지 등 특별한 목적으로 설계된 CPU 명령
  • 커널 모드에서만 실행

특권 명령 종류

  • I/O 명령
    • 하드웨어 제어 및 장치로부터의 입출력 
    • 사례) in eax, 300 ; I/O 포트 300 번지에서 값을 읽어 eax 레지스터에 저장 out 301, eax ; eax 레지스터에 있는 값을 I/O 포트 301 번지에 쓰기 
  • Halt 명령 
    • CPU의 작동을 중지시키는 명령. CPU를 유휴 상태로 만듦
  • 인터럽트 플래그를 켜고 끄는 명령 
    • CPU 내에 있는 인터럽트 플래그 비트를 제어하여 CPU가 인터럽트를 허용하거나 무시하도록 지시 
    • 사례) cli(clear interrupt flag)/sti(set interrupt flag) 명령 
    • 타이머 설정 명령 
    • 컨텍스트 스위칭 명령 
    • 메모리 지우기 명령 
    • 장치 상태 테이블 수정 등의 명령

커널의 실체

커널은 부팅 시에 커널 공간에 적재된 함수들과 데이터 집합

  • 커널은 컴파일된 바이너리 형태, 하드디스크 특정 영역에 저장, 부팅 시에 커널 공간의 메모리에 적재

커널 코드는 함수들의 집합

  • 커널의 존재 - 커널 모드에서 실행되는 함수들과 데이터들의 집합

응용프로그램 빌딩

라이브러리

  • 응용프로그램에서 활용하도록 미리 작성된 함수들,
    컴파일 되어 바이너리 형태로 제공되는 파일
  • 개발자는 라이브러리 활용 없이 응용프로그램 작성 불가

응용 프로그램이 활용하는 라이브러리는 2가지 유형

  • 표준 라이브러리
    • 사용자가 작성하기 힘든 함수 제공
    • 운영체제나 컴퓨터 하드웨어에 상관없이 이름과 사용법 동일
  • 시스템 호출 라이브러리
    • 시스템 호출 함수들 포함
    • 시스템 호출 함수들은 시스템 호출을 진행하여 커널 모드로 바꾸고 커널로 진입하여 커널에 만들어진 함수 실행
    • 운영체제마다 시스템 호출 함수의 이름이 서로 다름
    • 시스템 호출 함수를 커널 API라고 부름

시스템 호출 비용 : fread()와 read()의 비교

운영체제와 인터럽트

인터럽트

인터럽트

  • 입출력 장치들이 비동기적 사건을 CPU에게 알리는 행위
    • 비동기적이란 예정되지 않거나 발생시간을 예측할 수 없는 사건
    • (키보드 입력, 네트워크로부터 데이터 도착 등)
  • 하드웨어 인터럽트
    • 장치들이 어떤 상황 발생을 CPU에게 알리는 하드웨어 신호
    • CPU는 인터럽트를 수신하면 인터럽트 서비스 루틴 실행
  • 소프트웨어 인터럽트
    • CPU 명령으로 발생시키는 인터럽트
    • 하드웨어 인터럽트를 수신한 것과 동일하게 처리

컴퓨터에서 인터럽트 활용

  • 마우스를 움직이거나 클릭하는 등 마우스 조작
  • 키보드 입력
  • 네트워크로부터 데이터 도착
  • 하드디스크의 쓰기 종료
  • 시스템 클럭으로부터 일정한 시간 간격으로 알림
  • 컴퓨터의 리셋 버튼 누르기  USB 메모리 부착 혹은 해제

반응형
Comments