• 사용자의 입장이 아닌 개발자의 입장으로 운영체제라는 과목을 배울 수 있도록 한다.
  • 운영체제의 서비스
    • 사용자 인터페이스(User interface) : 운영체제가 동작한 결과를 사용자 또는 프로그램에게 제공하는 경우
    1. 명령어 라인 인터페이스(command-line interface, CLI) - 리눅스 등의 커멘드 창
    2. 그래피컬 사용자 인터페이스(grapical user interface, GUI) - 마우스나 키보드 등으로 입력하는 것
    3. 터치 스크린(touch-screen) - 스마트폰
    4. 배치 인터페이스(Batch interface) - 명령어와 명령어를 제어하는 디렉티브(directive)가 파일 형태로 입력되고 그 파일이 실행되는 인터페이스
    • 프로그램 수행(Program execution) : 시스템은 프로그램을 메모리에 적재해 실행할 수 있어야 한다. 프로그램은 정상적이든 혹은 비정상적이든 실행을 끝낼 수 있어야 한다.
    • 입출력 연산(I/O operation) : 수행 중인 프로그램은 입출력을 요구할 수 있다. 이러한 입출력에는 파일 혹은, 입출력 장치가 연관될 수 있다. 효율과 보호를 위해, 사용자들은 입출력 장치를 제어할 수 없다. 따라서 운영체제가 입출력 수행의 수단을 제공해야 한다.
    • 파일 시스템 조작(File system manipulation) : 프로그램은 파일을 읽고 쓸 필요가 있다.
    1. 프로그램은 이름에 의해 파일을 생성하고 삭제 할 수 있다.
    2. 지정된 파일을 찾을 수 있어야 한다.
    3. 파일의 정보를 열거할 수 있어야 한다.
    4. 몇몇 프로그램은 파일 소유권에 기반을 둔 권한 관리를 이용하여 파일이나 디렉터리의 접근을 허가하거나 거부할 수 있게 한다.
    • 통신(Communication) : 컴퓨터간 네트워크로 데이터를 주고받는 것 뿐만아니라 한 컴퓨터 내 프로세스들끼리도 정보를 주고 받을 수 있어야한다. -> 공유 메모리를 통해서 구현될 수도 있고, 메시지 전달(message passing) 기법에 의해 구현될 수 있는데, 후자의 경우 정보의 패킷들이 운영체제에 의해 프로세스들 사이를 이동한다.
    • 오류 탐지(Error detection) : 운영체제는 모든 가능한 오류를 항상 의식하고 있어야 한다. 아래에 오류가 발생 할 수 있는 환경을 열거해 놓았다.
    1. CPU
    2. 메모리 하드웨어(메모리 오류, 정전 등)
    3. 입출력 장치(테이프의 패리티 오류, 네트워크의 접속 실패, 프린터의 종이 부족)
    4. 사용자 프로그램(연산의 오버플로, 불법적인 메모리 위치에의 접근 시도, CPU 시간의 지나친 사용 등)
    • 자원 할당(Resource allocation) : 다수의 사용자나 다수의 작업들이 동시에 실행될 때, 그들 각각에 자원을 할당해 주어야 한다. CPU를 최대한 효율적으로 이용하기 위해 운영체제는 CPU 스케줄링 루틴이 CPU의 속도, 반드시 실행해야 할 작업들, 사용 가능한 레지스터의 수와 다른 요인들을 고려하도록 해야 한다.
    • 회계(Accounting) : 사용자가 어떤 종류의 컴퓨터 자원을 얼마나 많이 사용하는지를 추적할 수 있기를 원한다.
    • 보호(Protection)와 보안(security) : 컴퓨터 시스템에 저장된 정보의 소유자는 그 정보의 사용을 통제하길 원한다.
    • 위의 서비스들을 사용자나 프로그램에게 제공해야하는 것을 포함하고 있다.
    • 운영체제 서비스를 바라보는 관점

    1. 하드웨어와 사용자 프로그램은 운영체제로 간접적인 연결이 되어있다.
  • OS Interface
    • CLI - 커멘드 명령 창, 입력할 수 있는 위치가 나오고 명령을 입력하면 결과를 줌.
    1. 구성을 갖춘 명령을 입력하면 해석을 해주는 명령 해석기의 형태로 제공되기도 한다.
    2. 커널 내에 있는 명령(내부 명령)들이 존재, 외부 명령 또한 커널 바깥에 존재한다.
    3. 이러한 인터페이스를 묶어서 shell이라고 부른다. 내부의 커널 명령어를 밖에서도 사용할 수 있도록 해준다.
    4. 프로그램의 형태를 가지고 있기도 한다.
    • GUI - 터치나 마우스 등으로 선택 할 수 있음
    1. 직관적이고 편리한 방식으로 운영체제를 다룰 수 있게 해준다.
    2. 커멘드 라인에 대한 지식이 없는 사람이 사용할 수 있도록 설계
    3. 명령들을 몰라도 선택을 할 수 있다.
  • 컴퓨터 시스템 구조
    • I/O 디바이스들과 CPU는 경쟁관계에 있다. -> 메모리 데이터를 각자 읽고 써야하기 때문
    • I/O 장치들은 작은 크기의 버퍼 메모리를 가지고 있다.
    • 각 장치들마다 컨트롤러(프로그램)들이 있다.
    • 데이터들을 메모리로 옮기거나 메모리에서 가져올 수도 있다.
    • 이러한 일들을 정리해주는 것을 interrupt라고 한다.
    • interrupt : 인터럽트는 제어를 모든 서비스 루틴의 주소를 포함하고 있는 인터럽트 벡터를 통해 인터럽트 서비스 루틴을 전송한다.
    1. 인터럽트에 의해 중단된 명령의 주소를 저장해야한다. -> 인터럽트처리 후 다시 돌아와야하기 때문
    2. 명령의 주소 뿐만 아니라 CPU가 처리하고있던 상황을 저장해야 한다. -> 스택에 저장
    3. 하나의 인터럽트가 처리되는 동안 다른 인터럽트가 들어와도 중단하지 않는다.(대부분)
    4. 인터럽트가 처리되는 도중에 다른 인터럽트의 요청이 오면 pending(대기)시킨 후 먼저 온 인터럽트가 처리된 후 하나씩 처리한다.
    5. trap : 할 수 없는 일(0으로 나누는 것 같은)에 대한 요청이 있을 경우 외부가 아닌 내부에서 인위적으로 판단하여 의미없는 작업을 하지 않도록 인터럽트를 발생시킴 -> 같은 인터럽트지만 외부에서 발생한것이 아니라 내부에서 발생한 것들을 trap이라고 한다.
    6. 많은 디바이스들에 운영체제가 있을 수 있다.
    • 인터럽트와 트랩
    1. 인터럽트 : 하드웨어적인 사건(clock, 디스크 쓰기 완료, 패킷 도착) -> 외부적(예측할 수 없음 - 비동기적)
    2. 트랩 : 소프트웨어적인 사건(페이지 부재 결함, divide by zero, 시스템 호출, access violation) -> 사용자가 운영체제 내부로 서비스를 받기 위해(시스템 콜) 안으로 들어가는 절차, 사용자가 프로그램이 하기 어려운 일을 운영체제에게 부탁하기 위해 시스템 콜을 호출한다. - ex)하드디스크의 저장 위치를 알고 싶을 때 운영체제에 부탁(예측 가능 - 동기적)

    1. 인터럽트가 판명이 되었을 때는 프로그램의 함수처럼 동작을 한다.
    2. 외부에 일이 생기면 CPU에 전달을 하고 CPU가 하던 일을 멈춘다.(운영체제가 멈춤)
    3. 어떤 인터럽트인지 테이블에서 찾는다. -> 자동으로 찾을 수 있도록 함
    4. 해당하는 함수 위치로 jump, 함수를 실행하고 종료 후, 원래 동작으로 돌아간다.
    5. 함수 부분을 handler 또는 ISR이라고 부른다.

      1. 초기상태 : CPU는 사용자의 일을 하고 있고 I/O는 아무일도 하지 않는다.
      2. I/O에서 요청이 발생하면 controlor가 신호(transfer)를 보낸다.
      3. CPU는 그 신호를 받고 하던일을 멈춘 후 I/O의 처리를 하고 다시 원상태로 복귀한다. -> ISR 실행
  • Direct Memory Access Structure
    • 데이터를 읽고 쓸 때, CPU가 다른 일을 하면서 동시에 할 수 있을까?
    • 메모리 <-> 버퍼 간의 전송은 CPU의 관여없이 바로 전송할 수 있어야 한다.
    • 블록단위로 전송 -> 워드
    • cycle Stealing
    1. DMA 전송시간 중에 CPU와 Memory는 데이터를 상호 전송할 수 없다. -> I/O가 버스를 사용하면 버스는 하나이기 때문에 CPU의 버스는 HOLD상태에 있게 된다.
    2. 이 경우, CPU가 처리할 명령어 및 처리할 데이터가 메모리에 있으므로, CPU 원래의 목적(입출력 데이터 전송에 관계 없이 CPU가 계속 동작)에 문제가 있게 된다.
    3. 이를 해결하기 위해 CPU가 메모리와 관계 없는 동작을 할때만 DMA의 수행을 하게 한다. 이를 cycle stealing이라고 한다.
  • Storage Structure
    • Main memory - 컴퓨터가 프로그램을 수행하기 위해 필요한 주기억장치, 빠르게 읽고 쓸 수 있는 메모리중 저렴(RAM), 바이트단위로 데이터에 바로 접근할 수 있어야 한다. -> word단위
    1. 임의의 위치에 저장이 된다. -> 내가 원하는 위치를 바로 찾을 수 있다.(Random access)
    2. 프로그램을 저장하고 자료까지 전부 저장하기에 용량이 너무 작다.
    3. 전윈이 공급되지 않으면 내용을 바로 잃어버리는 휘발성 메모리이다.
    • 보조기억장치(Secondary storage) : 주기억장치에 저장하지 못하는 것들을 이곳에 저장한다. 속도는 떨어지지만 용량은 크다. -> ex)flash, hard disk, ssd

+ Recent posts