[운영체제와 정보기술의 원리] 3장. 컴퓨터 시스템의 동작 원리 (2/2)

Joey Hong·2020년 10월 7일
0

운영체제(OS)

목록 보기
3/4

7. 🖥 저장장치의 구조

⚡️ 주기억장치

보통 메모리라 불리는 것

  • 주로 휘발성(volatile)의 RAM을 매체로 사용
    • 전원이 나가면 저장되었던 내용이 모두 사라짐

⚡️ 보조기억장치

  • 주로 비휘발성(nonvolatile)의 마그네틱 디스크 사용
    • 전원이 나가도 저장된 내용을 기억
  • 플래시 메모리, CD, 마그네틱 테이프 등도 사용됨

보조기억장치의 용도

1. 파일 시스템(file system)용

전원이 나가도 유지해야하는 정보는 파일 형태로 보조기억장치에 저장

2. 스왑 영역(swap area)용

스왑영역은 메모리의 연장 공간

메모리

  • 크기 한정
  • 상대적으로 비싼 가격
  • 적은 용량
  • 다수의 프로그램이 동시수행되는 경우 메모리 공간이 흔하게 부족
  • 운영체제는 프로그램 수행에 당장 필요한 부분만 메모리에 올려둠
    • 그 외는 디스크의 스왑 영역에 내려놓는다 🥊 스왑 아웃(swap out)

하드디스크

보조기억장치 중 가장 대표적인 저장매체

  • 여러 개의 마그네틱 원판들이 존재
  • 암(arm)이 이동하며 원판에 저장된 데이터를 읽고 쓰는 방식
  • 디스크 원판의 표면은 트랙(track)으로 나뉨
  • 각 트랙은 섹터(sector)로 나뉨
  • 섹터에 최소한의 단위 정보 저장

8. 🖥 저장장치의 계층 구조

⚡️ 빠른/느린 저장장치

  • 빠른 저장장치부터 느린 저장장치까지 단계적인 계층 구조
  • 당장 필요한 정보는 빠른 저장장치에 넣어 수행 속도 상승

빠른 저장장치

  • 높은 단위 공간당 가격
  • 적은 용량 사용

느린 저장장치

  • 저렴한 가격
  • 대용량 사용
  • 느린 접근속도

⚡️ 상위 부분

  • 전원이 나가면 내용이 사라지는 휘발성 저장장치로 구성
  • 월등히 빠른 속도
  • 상대적으로 작은 용량
  • 당장 필요한 정보만 선별적으로 저장하면 하위의 대용량 저장장치와 비슷한 성능

휘발성 저장장치

  • 레지스터(register)
  • 캐시 메모리(cache memory)
  • 메인 메모리(main memory)

캐싱 기법

상대적으로 용량이 적은 빠른 저장장치를 이용해 느린 저장장치의 성능 향상시키는 기법

  • 느린 저장장치에 있는 내용 중 당장 사용되거나 빈번히 사용될 정보를 빠른 저장장치에 선별적으로 저장
    • 컴퓨터 데이터나 프로그램을 구성하는 부분중 일부만 집중적으로 사용

예시

  • 많은 횟수를 반복되는 코드
  • 한 번 수행되고 끝나는 코드
    반복코드를 빠른 저장장치에 올리면 적은 저장공간만으로 전체 시스템 평균 성능 향상

⚡️ 아랫부분

  • 전원이 나가도 지워지지않는 비휘발성 저장장치

9. 🖥 하드웨어의 보안

⚡️ 다중 프로그래밍 (multi-programming)

여러 프로그램이 동시에 실행되는 환경

  • 각 프로그램이 다른 프로그램의 실행을 방해하거나 프로그램 간에 충돌을 일으키는 문제를 막기 위해 하드웨어에 대한 각종 보안 기법 필요

커널 모드(kernel mode, system mode)

중요한 정보에 접근해 위험한 상황을 초래할 수 있는 연산은 커널모드에서만 실행되도록 해 보안성을 확보

  • 다른 프로그램의 메모리 영역이나 파일 영역 침범 방지
  • 운영체제가 CPU의 제어권을 가지고 운영체제 코드 실행
    • 모든 종류의 명령 실행 가능

특권 명령

시스템의 보안과 관련된 명령들

사용자 모드(user mode)

일반 사용자 프로그램이 실행되며 제한적인 명령만 실행 가능한 모드

  • 일반 사용자 프로그램은 직접 위험한 명령 수행 불가
  • 하지만 사용자 프로그램이 CPU를 가지고 있는 동안 중요한 연산을 수행해버리면 제어가 소용X
    • 운영체제가 감시X
    • 하드웨어적인 지원 필요
    • CPU 내부에 모드비트를 두어 사용자 프로그램 감시

모드 비트(mode bit)

특권명령은 모드비트가 0일 때만, 즉 커널모드에서 운영체제에 의해서만 수행 가능

  • 모드비트가 0이면 커널모드로서 모든 명령 수행 가능
  • 모드비트가 1이면 사용자모드로서 제한된 명령만 수행 가능
  • 운영체제가 사용자 프로그램에게 CPU 제어권을 넘길 때 모드비트를 1로 세팅
    • 하드웨어 접근 등 보안이 필요한 중요한 명령을 수행해야할 경우 시스템 콜을 통해 운영체제가 대신 수행
    • 인터럽트가 발생할 때 모드비트는 자동으로 0이 세팅
    • 운영체제가 수행을 끝내고 다시 제어권을 넘겨줄 때 모드비트를 1로 세팅

요약

  • 모든 입출력 명령은 특권명령으로 규정
    • 사용자 프로그램은 디스크에 저장된 파일에 자유롭게 접근 불가
  • 입출력이 필요할 때에는 운영체제에 시스템 콜로 대신 수행 요청
  • 입출력은 특권명령이라 모드비트가 0일 대에만 수행 가능

10. 🖥 메모리 보안

여러 프로그램이 메모리에 동시에 올라가서 실행되기 때문에 다른 프로그램이나 운영체제가 위치한 메모리 영역 침범 가능

  • 인터럽트 벡터와 인터럽트 처리루틴이 있는 곳은 각별한 보안 필요

기준/한계 레지스터

기준 레지스터 = 메모리 위 프로그램의 시작 주소
한계 레지스터 = 메모리 위 프로그램의 길이

  • 기준 레지스터(basic register)는 어떤 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리상의 가장 작은 주소 보관
  • 한계 레지스터(limit register)는 그 프로그램이 기준 레지스터값부터 접근할 수 있는 메모리의 범위를 보관

메모리 보호

  • 메모리 접근 연산이 있을 때마다 하드웨어적으로 현재 접근하려는 위치가 합법적인 범위에 있는지 체크
  • 사용자 프로그램은 기준 레지스터의 주소부터 기준 레지스터 + 한계 레지스터값 사이의 주소 영역에만 접근 가능
    • 이 범위 밖의 주소에 접근시 예외상황이라는 소프트웨어적 인터럽트 발생
    • CPU 제어권을 운영체제로 이양시키고 해당 프로그램 강제 종료

페이징(paging)

  • 위는 하나의 프로그램이 메모리의 한 영역에 연속적으로 위치하는 단순화된 메모리 관리 기법을 사용하는 경우에 관한 설명
  • 보통은 하나의 프로그램이 메모리의 여러 영역에 나뉘어 위치하는 페이징 기법을 사용

특권명령

  • 메모리 접근 연산은 특권 명령이 아님
    • 하지만 기준 레지스터와 한계 레지스터의 값을 세팅하는 여산은 특권명령으로 규정해야함
  • 프로그램이 메모리에 접근하기 전에 하드웨어적으로 그 접근이 합법적인지를 체크해 메모리 보호
  • 커널모드에서는 메모리에 무제한으로 접근 가능

11. 🖥 CPU 보호

특정 프로그램이 무한반복문을 수행하는 등 CPU의 사용권한을 독점하고 있다면 빼앗을 방법이 없다.

  • 이를 막기 위해 운영체제는 타이머(timer)라는 하드웨어 사용

타이머(timer)

  • 타이머는 정해진 시간이 지나면 인터럽트 발생시켜 운영체제가 CPU의 제어권을 획득할 수 있게함
  • 타이머에 의해 발생되는 인터럽트 처리루틴의 역할은 CPU 제어권을 빼앗아 다른 프로그램에게 이양하는 것

세팅

  • 타이머는 일정한 시간 단위로 세팅 가능
    • 🥊 세팅하는 명령을 로드 타이머(load timer)라고 하며 이는 특권명령
  • 매 클럭 틱(clock tick)마다 1씩 감소
  • 0되는 순간 인터럽트 발생
  • 시분할 시스템에서 현재 시간을 계산하기 위해서도 사용됨

12. 🖥 시스템 콜을 이용한 입출력 수행

입출력 명령은 특권명령

  • 사용자 프로그램이 디스크의 파일에 데이터를 쓰는 행위
  • 디스크의 파일로부터 데이터를 읽어오는 행위
  • 키보드로부터 입력을 받는 행위
  • 수행 결과를 화면에 출력하는 행위

시스템 콜

  • 입출력 명령은 운영체제 코드에 구현되어있음
  • 사용자 프로그램은 운영체제에 시스템 콜이라는 서비스 대행 요청으로 입출력 수행
  • 소프트웨어적인 인터럽트

과정

  1. 사용자 프로그램이 시스템 콜
  2. 트랩이 발생
  3. CPU의 제어권이 운영체제로 넘어감
  4. 운영체제는 시스템 콜을 처리하기 위한 루틴으로 가서 정의된 명령 수행(컨트롤러에게 입출력 명령하도록 명령)
  5. 컨트롤러가 입출력 수행을 마치면 CPU에게 인터럽트 발생
  6. 사용자 프로그램이 다시 CPU를 할당받을 수 있도록 함
profile
개발기록

0개의 댓글