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. 🖥 시스템 콜을 이용한 입출력 수행
입출력 명령은 특권명령
- 사용자 프로그램이 디스크의 파일에 데이터를 쓰는 행위
- 디스크의 파일로부터 데이터를 읽어오는 행위
- 키보드로부터 입력을 받는 행위
- 수행 결과를 화면에 출력하는 행위
시스템 콜
- 입출력 명령은 운영체제 코드에 구현되어있음
- 사용자 프로그램은 운영체제에 시스템 콜이라는 서비스 대행 요청으로 입출력 수행
- 소프트웨어적인 인터럽트
과정
- 사용자 프로그램이 시스템 콜
- 트랩이 발생
- CPU의 제어권이 운영체제로 넘어감
- 운영체제는 시스템 콜을 처리하기 위한 루틴으로 가서 정의된 명령 수행(컨트롤러에게 입출력 명령하도록 명령)
- 컨트롤러가 입출력 수행을 마치면 CPU에게 인터럽트 발생
- 사용자 프로그램이 다시 CPU를 할당받을 수 있도록 함