운영체제[2.컴퓨터 시스템의 구조(4)]

이유정·2023년 6월 2일
0

운영체제

목록 보기
5/43

지난시간 복습

  • cpu가 있고, cpu의 작업공간인 메모리가 있고, cpu는 매순간 메모리에 있는 기계어를 하나씩 읽어서 실행한다. 메모리의 어디에 있는 기계어냐? cpu에 있는 레지스터가 가리키고 있는 메모리 위치에서 매번 기계어를 읽어서 실행하게 된다.
  • interrupt가 들어와잇으면 프로그램카운터가 어디를 가리키고 있는지는 모르겠지만, 무조건 pc는 운영체제를 가리키도록 정해져있다. 하드웨어적 원칙
  • => 자동으로 mode bit이 0으로 바뀐다. 모든 기계어 다 실행 가능
  • 운영체제가 다른 프로그램에 cpu를 넘길때 mode bit을 1로 바꿔서 제한된 기계어만 실행

목표

인터럽트가 운영체제를 구동시키는 원리와 인터럽트의 한 종류인 시스템콜에 대해 알아본다. 동기식/비동기식 입출력에서의 인터럽트, DMA를 이용한 인터럽트 조절에 대해 알아본다. 계층구조에 의해 I/O 에서 입출력 명령어가 다름을 이해한다.

인터럽트

  • 인터럽트는 원래 하드웨어들이 CPU한테 정보를 전달하기 위한 것이였는데
  • 지금 인터럽트는 소프트웨어가 본인이 직접할 수 없는 일을 운영체제한테 부탁하기 위햇 자기 코드를 이용해서 인터럽트를 건다 => 시스템 콜
  • 전반적으로 소프트웨어들이 인터럽트라인을 세팅해서 인터럽트를 거는것을 소프트웨어 인터럽트
  • 하드웨어들이 인터럽트 거는 것을 하드웨어 인터럽트라 한다.

인터럽트 이러면은,
CPU에 붙어있는 인터럽트 라인이 세팅돼서 다음 실행하기 전에 CPU를 운영체제한테 자동적으로 넘어가게 하는건데.

키보드 컨트롤러

  • 이것도 진행상황 똑같음

  • 함수를 써서 입력을 받아서 프로그램 실행하는 코드를 만나면, 본인이 직접 못하기 때문에 운영체제한테 시스템 콜을 하고, 큐에다가 줄세워놓고 다른 프로그램한테 CPU를 넘긴다. 언젠가 키보드 입력이 들어오면? 키보다 컨트롤러가 CPU한테 인터럽트를 걸어서 요청한거 들어왔다. CPU가 운영체제한테 넘어와서 키보드 요청한 프로그램한테 CPU를 넘겨주고, 그 다음을 처리하게 된다.

  • 모든 I/O장치를 전담하는 작은 CPU

  • CPU는 하드웨어다. Device controller도 하드웨어다.

  • 운영체제는 소프트웨어다.

  • device controller 어디 코드가 있고, 어디 기계어 같은게 있고 주어진대로 일한다

  • 미리 이 안에 코딩된 프로그램들이 들어있다. 그거에 의해서 동작을 한다.

  • device driver는 소프트웨어다. / 운영체제 안에 있는 코드 중에서 cpu가 부탁하는 기계어가 있다. 그게 디바이스 드라이버. 컨트롤러가 수행하는 코드가 아니고 큰 cpu가 수행하는 코드다. 컴퓨터 내부에서 실행
  • device controller는 ? 코드가 있어서 코드에 의해서 디스크 내용을 읽거나 쓰는 것은 펌웨어라고 한다. 이미 이 안에 코딩이 되어있는 상황이다.

요약 & 질문

운영체제한테 cpu가 넘어가는 경우는?
1) interrupt line 을 세팅하는 경우에 한해서.

  • 하드웨어 장치들이 interrupt를 걸어서
  • 프로그램 소프트웨어들이 interrupt => 시스템 콜 (본인 기계어로는 안돼서)
  • 프로그램이 권한이 없는 기계어를 실행하려고 했을 때

인터럽트 벡터
: 인터럽트 종류별로 해당하는 종류의 인터럽트가 발생했을 때 운영체제의 어디 있는 코드를 실행해야 하는지 인터럽트 종류별로 실행해야 하는 코드의 위치를 가지고 있음
=> 타이머 인터럽트가 걸렸을 때~~ 여기 있는 코드 실행. 디스크 컨트롤러가 인터럽트가 걸렸을 때~~ 저기 있는 코드 실행
인터럽트 처리 루틴
: 해당 인터럽트가 뭐해야하는지 기계어로 저장되어있다.

프로그램이 cpu를 가지고 있다가, 스스로 내놓던지 빼앗기는 경우는?
1) 나는 계속 cpu를 쓰고 싶은데 , 번갈아쓰게 만드는 규정
=> timer interrupt
2) 더이상 cpu를 쓸 의지가 없는 경우
=> i/o 작업을 해야할 때! 내가 cpu를 가지고 있어봐야 다음 기계어를 실행하지 못해. i/o가 못끝나서 (디스크가 파일을 읽어와야 그 다음 작업할 수 있을 때)

동기식 입출력과 비동기식 입출력

cpu가 i/o 요청을 한다. 그 작업과cpu의 작업이 씽크 되어야 하는데 동기식 i/o .
시스템 콜을 해서 i/o 요청을 해서 시킨일이 다 끝나서 컨트롤러가 인터럽트를 걸었을 때 그 결과를 보고 그 다음 스텝을 밟아가는건 => 동기식

  • cpu가 디스크에 요청을 한다음에 자기는 멋대로 일을 하는 => 비동기식

DMA

CPU는 대단히 빠른 자원이라서 놀지않고 계속 일한다. 인터럽트를 CPU한테 걸 때 너무 자주 걸리면 인터럽트 처리도 일종의 오버헤드다. CPU가하던일을 멈추고 운영체제한테 넘겨져서 다시 프로그램한테 넘겨진다. 인터럽트는 CPU입장에서 보면 그렇게 빈번한 일은 아니다.
I/O 장치 중 고속 장치가 있다. 인터럽트가 너무 자주 걸리면 CPU한테 대단히 비효율적인 상황이 생긴다.

DMA : direct memory access
메모리에 접근할 수 있는 장치를 하나 더 둔다.
=> 인터럽트가 너무 자주 걸리는걸 막기 위해서 존재
아주 작은 크기의 데이터가 로컬 버퍼에 들어와 있다해서 그때마다 이 컨트롤러가 직접 cpu한테 인터럽트를 거는게 아니라, DMA가 직접 메모리에 카피하는 작업까지 해준다. 그 작업이 다 끝나면 인터럽트를 한번 걸어서 알려준다. 그러면 인터럽트가 덜 빈번하게 발생한다. CPU가 효율적으로 동작하게 된다.

서로 다른 입출력 기계어

I/O를 수행하는 방법은 2가지가 있다.

  • I/O를 전담하는 기계어를 두는 방법
    : CPU에서 기계어를 실행할 때 디스크에서 뭐 읽어와라. 요청하는 기계어가 따로 있는 경우

저장장치 계층 구조

저장장치가 계층적으로 구조. 위로갈수록 용량은 적을수록 빠르고, 아래로 갈수록 용량은 크고 느리고 저렴하다. 이러한 계층 구조에서 모든 데이터는 실제적으로 아래쪽에. 필요할 때 위에서 읽어다가 쓰도록 되어있다.
캐싱의 개념이라는게 위쪽에서 필요하다고 하면 제일 아래쪽까지 가면 느리기 때문에 중간에 미리 가지고 있으면 바로 위로 가져가는=> 캐싱의 원리
재사용성이 높은 것을 보관하고 있고, 사용가능성이 낮은것을 쫓아내는게 캐싱을 효율적으로

profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글