Technology's Impact on Programs

난1렙이요·2024년 9월 20일
0

시스템 프로그래밍

목록 보기
3/22

기술의 발전에 따라 OS에서는 아래 3가지의 기술이 중요해졌다.

  • Communication
  • Concurrency
  • Asynchronous operation

Communication

통신은 한 매체에서 다른 매체로 정보를 보내는 기술을 의미한다. 여기서는 컴퓨터와 컴퓨터간의 통신 뿐만 아니라, 컴퓨터 안의 프로세스와 프로세스 사이에서 정보를 주고 받는 과정 또한 통신이라고 한다.

Concurrency

리소스를 공유함으로써, 실제로는 한 프로세스만 시행하지만 동시에 시행되는 것처럼 보이게 해주는 것을 concurrency라고 부른다. 프로세스가 끝나기 전에 대기하고 있는 다른 프로세스를 같이 시행해 줌으로써 동시에 시행되는 것처럼 보이게 한다. 이런 기술을 Time sharing 이라고 주른다. 진짜 동시에 수행되는 건 parallel task라고 부른다. CPU, data등이 해당된다.

Asynchronous operation

Asynchronous는 이벤트들이 예정되지 않은 시간에 예정되지 않은 명령을 받고 실행되는 것을 의미한다. Asynchronous operation는 언제 실행되는 지 예측할 수 없는 이벤트가 실행되었을 때 잘 실행되도록 하는 기술을 말한다. 키보드 입력이나 인쇄 요청등이 해당된다.
이벤트를 처리하는 방법 중 제일 쉬운 것은 이벤트가 들어오기 전까지 대기하는 것이지만, 마냥 대기하는 건 컴퓨터의 성능을 많이 잡아먹기 때문에 처리하는 기능을 잘 구현해야 한다.

시간과 속도

OS의 성능을 측정할 때 대부분 시간과 속도를 기준으로 성능을 측정한다.
OS가 관리하는 시스템 리소스는 s/w와 h/w 두가지가 있다. 하드 디스크와 CPU가 계속해서 발전하면서 OS의 성능은 대부분 높아졌다. 디스크를 읽는 시간과 받아오는 시간 등은 올라가긴 했지만, 물리적인 특성상 읽는 시간이 많이 발전하지는 않았다. 이와 반대로 CPU의 속도는 기하급수적으로 발달했다.

MultiProgramming

  • 하나 이상의 프로세스가 실행 준비상태가 될 수 있다. 프로세스들이 ready queue에 들어간다.
  • OS는 실행 준비상태의 프로세스들 중 하나를 고른다. ready queue에 들어간 프로세스 중 하나가 schedule system에 의해 memory로 이동한다.
  • resource request(리소스의 요청. I/O등이 포함됨)가 OS에게 결과를 달라고 요청함
    (i.e a system call)
  • system call가 OS에게 요청에 대한 서비스를 달라고 하면, CPU에서는 기존에 하고 있던 작업을 잠깐 멈추고(interrupt), OS에 통제권이 넘어간다.

Time sharing

CPU에서 동시에 여러개의 프로세스를 실행하는 것 같은 착각을 주는 기술이다. CPU하나는 원래 하나의 프로세스만 수행할 수 있지만, 타임 쉐어링을 통해 여러 프로세스를 스위칭하면서 사람 눈에는 동시에 프로세스를 실행하는 듯 느끼게 만든다.

Interrupt

특정한 이벤트가 발생했을 때 interrupt라는 과정을 통해 이벤트가 발생했음을 알리는 기술이다.

  • 먼저, 컴퓨터의 실행 주기인 insturcion cycle마다 interrupt를 확인한다.
  • 발생할 수 있는 이벤트의 hardware flag마다 interrupt를 확인하고, 만약 interrupt가 발생했으면 해당되는 이벤트를 수행한다.
  • intuerupt가 발생하면 CPU는 현재 실행되고 있는 프로세스의 프로그램 카운터(다음에 실행해야 할 프로세스의 주소)를 저장하고 interrupt가 발생한 이벤트에 대응되는 서비스를 가져와서 실행한다.
  • 서비스가 끝나면 저장해놨던 프로그램 카운터를 다시 읽어 멈췄던 프로세스를 실행한다.

Signals

시그널은 이벤트가 발생했을 때 사용하는 소프트웨어적인 통제수단이다.

  • 시그널은 대부분 interrupt가 발생했을 때 OS가 프로세스에게 응답해주는 방법으로 사용한다.
    • Ctrl+C(프로세스에게 interrupt 시그널을 보냄. 복사가 아님) -> interrupt by the device driver -> OS sending a signal to the process
      signal to the process
  • Signal은 synchronous도 있고 asynchronous도 있다.
    • Synchronous : divide-by-zero같이 오류가 났을 때 보내는 signal
    • Asynchronous : Ctrl+C같이 키보드를 누르는 signal

The network as the computer

Concurrency와 Communication을 통해 서로 다른 어플리케이션들끼리 만날 수 있다. 가장 기본적인 모델은 client/server model이다. 서버는 리소스를 주는 자이고, 클라이언트는 받는 자이다. 서버는 요청을 받고, 그에 대한 응답을 해줄 수 있다.

Fault tolerance

오류가 발생해도 프로세스나 어플리케이션이 잘 돌아가도록 해주는 것을 Fault tolerance라고 한다. Fault가 발생하는 이유는 여러가지가 있다.

  • 프로그래머의 실수(i.e 버퍼 해제 오류)
  • 프로그램 언어의 문제(C언어의 함수 호출시 return value, 메모리 영역을 벗어나는 문제)

Buffer overflows

C에서 char배열을 이용해서 문자열을 받을 때, null캐릭터가 들어가야 하므로 n개의 배열을 만들면 n-1개를 넣을 수 있다. 그러나 n개 이상의 문자열을 넣으면 buffer overflow가 일어난다.
배열에 문자열을 받는 행동은 stack에 값을 저장한다는 의미다. 이 stack에는 변수나, return address나, 다른 메모리가 들어가 있을 수 있다. buffer overflow가 일어나면 이러한 지점들을 침범하므로 프로그램이 죽거나 많은 버그가 일어날 수 있다.

profile
다크 모드의 노예

0개의 댓글