[운영체제] 컴퓨터 시스템과 운영체제

1. 컴퓨터 시스템과 하드웨어

1) 컴퓨터 시스템 계층 구조

  • 응용 소프트웨어 - 운영체제 - 컴퓨터 하드웨어
  • 계층 구조의 특징
    • 사용자는 응용프로그램을 통해 컴퓨터 활용
    • 하드웨어는 모두 운영체제의 배타적 독점적 지배를 받음
    • 사용자나 응용프로그램의 하드웨어 직접 접근 불허
  • 사용자가 하드웨어에 대해 몰라도 컴퓨터 사용 가능

2) 컴퓨터 하드웨어

(1) CPU

  • 프로그램 코드, 기계명령을 해석하여 실행하는 중앙처리장치
  • 컴퓨터의 가장 핵심으로 전원 공급시 동작하며 메모리에 적재된 프로그램 실행

(2) 메모리

  • cpu에 의해 실행되는 프로그램 코드와 데이터가 적재되는 공간
  • 실행되기 위해 반드시 메모리에 적재되어야 함

(3) 캐시 메모리

  • cpu 처리속도의 빠른 발전으로 대기시간 증가 → 캐시 메모리로 cpu 실행 속도를 높임
  • 온칩 / 오프칩 메모리
    • 온칩 메모리(on-chip) : cpu 내부에 설치되는 캐시 메모리
    • 오프칩 메모리(off-chip) : cpu 외부에 설치되는 캐시 메모리

(4) 버스

  • 하드웨어들이 데이터를 주고 받기 위해 디지털 신호가 지나는 여러 선의 묶어 부르는 용어
  • 버스의 종류
    • 주소 버스 : 주소 신호가 지나다니는 버스
    • 데이터 버스 : 데이터 신호가 지나다니는 버스
    • 제어 버스 : 제어 신호가 지나다니는 버스
  • 주소
    • 메모리나 입출력 장치나 저장 장치 내에 있는 저장소에 대한 번지
    • cpu는 메모리나 입출력 장치에 값을 쓰거나 읽을 때 반드시 주소를 발생시킴
  • 목적에 따른 버스 구분
    • 시스템 버스 : cpu, 캐시 메모리, 메모리 등 처리가 빠른 하드웨어들 사이 신호 전송
    • 입출력 버스 : 상대적으로 느린 입출력 장치들로부터 입출력 데이터 전송

3) CPU와 메모리의 관계

  • 32비트 cpu = 32비트 운영체제 = 32비트 컴퓨터
    • cpu에 32개의 주소선
    • cpu가 액세스 하는 주소 범위 : 0 ~ 2^32-1번지
    • cpu가 최대 액세스 가능한 메모리 크기 : 4GB
  • 32비트 CPU를 가진 컴퓨터에는 4GB 이상의 메모리를 달아도 소용없음
  • cpu 입출력되는 32개의 데이터 선

4) 명령

  • cpu가 해석하고 실행할 수 있는 기계 명령
  • cpu마다 명령 이름, 기계어 코드, 개수 등이 다름

(1) 명령 처리 과정

  • cpu 레지스터
    • PC(Program Counter) : 다음에 실행할 명령의 메모리 주소 저장
    • IR(Instuction Register) : 현재 실해하기 위해 메모리로부터 읽어 온 명령 저장
    • SP(Stack Pointer) : 스택의 맨 위 메모리 주소 저장
    • 데이터 레지스터 : 연산에 사용될 데이터들을 저장
    • 상태 레지스터 : cpu의 상태 정보나 인터럽트 금지 등의 제어 정보 저장
  • 명령어 사이클
    • cpu가 하나의 명령을 실행하는 과정
MOV EAX, [300] ; 메모리 300번지의 값을 읽어 EAX 레지스터에 저장
  1. cpu는 PC레지스터가 가리키는 주소를 주소 버스에 실음
  2. 메모리는 주소 버스가 가리키는 주소 번지에 저장된 데이터를 데이터 버스에 실음
  3. cpu는 데이터 버스에 담긴 바이너리 값들은 IR레지스터에 저장, PC는 다음 번지로 수정
  4. cpu는 연산에 필요한 데이터를 읽기위해 데이터의 주소를 주소 버스에 실음
  5. 메모리는 데이터 버스가 가르키는 주소의 값을 데이터 버스에 실음
  6. cpu는 데이터 버스로부터 값을 임시 데이터 레지스터에 저장
  7. cpu는 명령을 해석하고 명령 실행

5) 스택의 위치

  • 프로그램이 실행되기 위해 운영체제에 의해 할당
    • 코드 공간 : 프로그램 코드 적재
    • 데이터 공간 : 전역 변수들이 적재
    • 힙 공간 : 프로그램에서 동적으로 저장할 데이터를 위한 공간
    • 스택 공간 : 함수가 호출될 때 매개 변수, 지역 변수 등을 저장하는 공간
  • 스택
    • 별도의 하드웨어 메모리가 아닌 메모리의 일부를 사용
    • 각 프로그램에게 자신만의 스택 공간 할당

6) 컨텍스트 (Context)

  • 프로그램이 실행 중인 일체 상황 혹은 상황 정보
    • 메모리 - 프로그램 코드와 데이터, 스택, 동적할당 받아 저장한 값
    • cpu 레지스터들의 값
  • 컨텍스트 스위칭
    • 현재 실행 중인 프로그램의 컨텍스트를 저장
    • 다른 프로그램의 저장된 컨텍스트를 cpu에 복귀
    • → 현재 프로그램을 중지하고 다른 프로그램을 실행할 때 발생

7) 멀티 코어 CPU

  • cpu 내부에 2개의 프로세서 포함
  • 2개의 프로그램 동시에 실행
  • 코어는 과거의 cpu와 동일 → 프로그램을 완벽히 처리 가능

2. 컴퓨터 시스템과 운영체제

1) 컴퓨터 시스템 계층 구조 설계 이유

  • 계층간 독깁성 확보
    • 사용자는 하드웨어를 몰라도 응용프로그램을 통해 컴퓨터 활용
    • 컴퓨터의 하드웨어의 타입이나 구조, 제어 방법을 몰라도 응용프로그램 개발 가능
      • 하드웨어의 변경으로 다시 개발해야할 필요 없음

2) 운영체제의 필요성

  • 운영 체제가 없을 경우 응용프로그램이나 사용자가 직접 하드웨어를 제어해야함
  • 또한, 하드웨어에 대한 지식, 충돌, 보안, 관리 등의 문제 발생

(1) 운영체제의 필요성

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

3) 운영체제와 응용프로그램

  • 응용프로그램 : 워드, 웹브라우저 등 사용자가 컴퓨터를 활용하도록 작성된 다양한 프로그램
  • 응용프로그램에 대한 운영체제의 역할
    • 응용프로그램이 직접 하드웨어를 다루지 못하도록 차단 → 하드웨어 사용 충돌을 막음
    • 하드웨어 사용이 필요 → 운영체제를 통해 하드웨어 조작 (시스템 호출)
    • 응용프로그램 실행 순서 제어, 응용프로그램들 사이의 통신 중계

4) 운영체제와 사용자

  • 사용자는 응용프로그램을 통해 컴퓨터 활용
  • 사용자에 대한 운영체제의 역할
    • 사용자가 하드웨어 지식이 없어도 컴퓨터 활용이 가능
    • 하드웨어 설치나 변경에 도움을 줌
    • 편리한 인터페이스 제공
    • 컴퓨터 사용을 돕는 도구 프로그램 제공
    • 사용자 계정 관리
    • 사용자의 통계

5) 운영체제와 하드웨어

  • 하드웨어 제어는 운영체제의 몫
  • 운영체제는 사용자/응용프로그램과 하드웨어 사이의 매개체

6) 운영체제 기능

  • 프로세스와 스레드 관리
    • 프로세스/스레드의 실행, 일시 중단, 종료, 스케줄링, 컨텍스트 스위칭, 동기화
  • 메모리 관리
    • 메모리 할당, 반환, 다른 프로세스/스레드로부터 메모리 보호
    • 하드 디스크의 영역까지 사용하는 가상 메모리 기술
  • 파일 관리
    • 파일 생성, 저장, 읽기, 복사, 삭제, 이동, 파일 보호
  • 장치 관리
    • 하드웨어에 대한 장치 제어
  • 사용자 인터페이스
  • 네트워킹
    • 네트워크 인지, 연결, 닫기, 데이터 송수신
  • 보안
    • 바이러스나 웜, 멀웨어, 해킹 등의 외부 공격이나 무단 침입으로부터 보호

7) 운영체제 구성

  • 운영체제는 커널 + 툴 + 디바이스 드라이버
  • 커널 (좁은 의미의 운영체제)
    • 운영체제의 핵심, 부팅 후 메모리에 상주하는 코드와 데이터
    • 커널 기능을 이용하려면 반드시 시스템 호출 사용
  • 도구 소프트웨어와 GUI
    • 사용자가 컴퓨터를 편리하게 사용할 수 있도록 제공하는 도구프로그램
  • 디바이스 드라이버
    • 장치를 직접 제어하고 입출력하는 소프트웨어

8) 운영체제 커널 인터페이스

  • 커널이 제공하는 2개 인터페이스 : 시스템 호출 / 인터럽트
  • 시스템 호출
    • 커널과 응용프로그램 사이의 인터페이스
    • 응용프로그램에서 커널 기능을 사용하는 유일한 방법
  • 인터럽트
    • 커널과 하드웨어 장치 사이의 인터페이스
    • 장치들이 입출력 완료, 타이머 완료 등을 cpu에 알리는 하드웨어적 방법
    • cpu는 하는 일을 중단하고 인터럽트 서비스 루틴 실행

3. 커널과 시스템 호출

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

  • 응용프로그램이 직접 컴퓨터 자원에 접근하면 충돌과 훼손 발생
  • → 응용프로그램의 자원 접근 불허
    • 자원 접근은 커널만 허용
  • → 메모리 공간을 사용자 공간과 커널 공간으로 분리
    • 응용프로그램은 사용자 공간, 커널은 커널 공간에만 적재
    • 시스템 호출을 통해 커널 코드 이용
  • → cpu의 실행 모드를 사용자 모드와 커널 모드로 분리
    • 응용프로그램은 사용자 모드, 커널 코드는 커널 모드에서만 실행
    • 사용자 모드서 커널 코드 접근 시 강제 종료

2) 사용자 공간과 커널 공간

  • 사용자 공간: 모든 응용프로그램들이 나누어 사용하는 공간
  • 커널 공간 : 커널만 사용할 수 있는 공간
  • 커널 코드와 데이터를 악이적인 사용자, 응용프로그램이나 코딩 실수로부터 보호
  • 사용자 공간 크기 : 한 응용프로그램의 최대 크기
    • 프로그램 코드 + 데이터 + 동적할당 + 스택을 합친 크기
    • 사용자 공간 크기가 2GB일 경우 응용프로그램의 최대 크기는 2GB

3) 가상 주소 공간

  • 주소 공간 : 사용자 공간 + 커널 공간
  • 물리 메모리 주소 범위와 무관한 가상 주소 공간을 사용
  • 사용자나 응용프로그램 관점에서 보는 주소 범위로 전체 메모리를 사용하고 있다고 착각

4) 사용자 모드와 커널 모드

  • CPU는 둘 중 하나의 모드로 실행
  • 사용자 모드
    • cpu는 사용자 공간에 있는 코드나 데이터 액세스
    • cpu는 커널 공간 접근 불가
    • 특권 명령 실행 불가
  • 커널 모드
    • cpu가 커널 공간에서 실행 중 (사용자 공간도 실행 가능)
    • 특권 명령 실행 가능
  • 사용자 모드서 커널 모드로 변경되는 경우
    • 시스템 호출과 인터럽트 발생

5) 특권 명령

  • 커널 모드에서 실행할 특별한 목적으로 설계된 CPU 명령
  • 종류
    • I/O 명령 : 하드웨어 제어 및 장치로부터의 입출력
    • Halt 명령 : cpu의 작동을 중지시키는 명령
    • 인터럽트 플래그 on/off
    • 타이머 설정 명령
    • 컨텍스트 스위칭 명령
    • 메모리 지우기 명령
    • 장치 상태 테이블 수정 등의 명령

6) 실행 모드와 관한 이슈

  • 실행모드는 cpu의 기능
  • 모드를 구분하여 작동시키는 이유는 커널 공간의 보호
  • 시스템 호출을 통해 커널 코드를 사용하므로 응용프로그램을 직접 커널 코드 호출 불가
  • cpu는 평균적으로 커널 모드에서 많이 실행

7) 커널

  • 커널은 부팅 시에 커널 공간에 적재된 함수들과 데이터의 집합
  • 커널은 단순 함수들의 집합으로 시스템 호출을 통해 호출 → 프로세스는 아님
  • 커널은 스택이나 힙을 가지지 않으며 스레드를 위한 스택이 커널 공간에 생성
  • → 커널은 스스로 실행되는 코드(프로세스)가 아님

8) 응용프로그램 빌딩

  • 라이브러리
    • 응용프로그램에서 활용하도록 미리 함수들을 작성하여 컴파일하고 바이너리 형태로 만든 파일
  • 응용프로그램이 활용하는 라이브러리 유형 2가지
    • 표준 라이브러리 - 사용자가 작성하기 힘든 함수 제공
    • 시스템 호출 라이브러리 - 시스템 호출을 진행하여 커널 모드로 진입하고 커널에 만들어진 함수 실행

9) 함수 호출과 시스템 호출

  • 함수 호출
    • 사용자 공간에 적재된 함수가 다른 함수나 라이브러리 함수 호출
    • 사용자 공간의 스택에 돌아올 주소, 매개변수 전달, 호출된 함수의 지역변수 생성
    • 호출된 함수가 끝나면 함수를 호출한 곳으로 복귀
  • 시스템 호출
    • 응용프로그램이 운영체제의 기능을 사용하려고 하는 경우
    • 시스템 호출을 일으키는 특별한 기계명령 실행
    • 커널의 시스템 호출 핸들러 실행

10) 시스템 호출

  • 사용자 공간의 코드에서 커널 서비스를 요청하는 과정
  • 시스템 호출 라이브러리 제공
  • 시스템 호출을 일으키는 기계 명령
    • cpu마다 시스템 호출을 실행하는 특별한 기계 명령 제공
  • 라이브러리를 통해 간접적으로 시스템 호출이 이루어짐
    • 응용프로그램 → 표준 라이브러리 함수 → 시스템 호출 라이브러리의 시스템 함수 호출 → 시스템 호출 cpu 명령
  • 시스템 호출 비용
    • 함수 호출 fread와 시스템 호출 read 비교
      • 시스템 호출은 많은 시간 비용
      • read를 여러번 호출 시 프로그램 실행 속도 저하

4. 운영체제와 인터럽트

1) 인터럽트

  • cpu가 현재 일을 중단하고 다른 일을 하도록 시키는 비동기적 방법
  • 하드웨어 인터럽트 : 장치들의 상황 발생을 cpu에게 알리는 하드웨어 신호
  • 소프트웨어 인터럽트 : cpu 명령어에 의해 하드웨어 인터럽트를 수신한 것과 동일한 처리
  • 인터럽트 발생 → cpu는 인터럽트 서비스 루틴 실행

2) 인터럽트 서비스 루틴과 운영체제

  • 인터럽트 서비스 루틴 : 디바이스 드라이버나 커널 코드에 위치
  • 다중프로그래밍을 위해서는 인터럽트가 필요
    • 여러 프로세스를 동시에 실행
    • 한 프로세스가 입출력 시행시 다른 프로세스로 교체 실행
    • 입출력 완료될 때, 장치로부터 입출력 완료 통보 필요 → 인터럽트
    • 입출력이 완료되었는지 계속 검사하는 폴링보다 효율적
  • 인터럽트의 효과
    • 입출력 장치와 cpu가 동시에 각자 작업 실행
    • 컴퓨터 시스템의 효율적 작동 → cpu 활용률 증가 및 시스템 처리율 상승