Technology’s Impact on Programs - 시스템프로그래밍

Technology’s Impact on Programs - 시스템프로그래밍

Tag
Computer Science Engineering
System Programming

Terminology

Asynchronous operation ( 비동기식 작업 )

많은 이벤트들이 예측할 수 없는 시간에 예측할 수 없는 순서로 실행됨
ex) 키보드 입력, 프린트 요청
 

Concurrency ( 동시성 / 병행성 )

↔ parallel task ( 병렬 )
같은 시간 프레임에서 리소스를 공유한다
ex) CPU, data, codes, devices
 

Communication

하나의 entity ( 프로세스 ) 에서 다른 entity로 정보를 통신하는 것
 

Time and speed

  • sw ( socket, file ) / hw 리소스
  • Disk drives
    • 하드 디스크 접근 속도가 높을 수록 성능이 좋다
  • processor ( cpu )
 

Multiprogramming

싱글코어라고 생각하자 ( CPU가 하나이다 )
instruction cycle ⇒ 메모리가 실행 파일을 가져와서 그 instruction은 cpu가 실행한다.
프로세스 ⇒ 메모리에 올라가 실행중인 것
  • 프로세스 하나 이상이 실행 준비 상태에 있을 수 있다.
  • 일단 프로세스가 생기면 ready queue 에 차례로 들어가게 된다.
  • OS가 준비중인 프로세스 중 하나를 고른다
  • process에는 컴퓨터 시스템의 리소스를 사용해야하는 instruction 이 있을 수 있다.
    • 이는 OS 요청 ( system call )을 할 수 있다.
  • system call은 서비스를 위해 OS에게 요청하는 것이며 ( I/O device가 하겠지 ), 이는 instruction cycle이 interrupted 가 되고, 컨트롤은 OS로 넘어간다.
 

Time sharing

  • 프로세스와 프로세스 사이를 왔다갔다 하며 실행을 한다.
    • ⇒ 동시에 실행하는 것 처럼 보인다.
 
💡
multi programming vs time sharing? ⇒ multi programming: 여러 프로세스가 대기할 수 있다 ⇒ time sharing: 대기하고 있는 여러 프로세스 사이를 switch하며 CPU를 사용할 수 있게 해준다
 

Interrupts

  • Processor instruction cycle
    • 매 instruction cycle 마다 프로세서는 하드웨어 flag가 있어 이를 체크하여, interrupt가 있는지를 확인한다
  • 주변 장치 / I/O 장치를 통해서 이벤트가 발생했을 때, 처리해야할 데이터가 있을 것이다. 이 때 hardware flag를 생성하여 interrupt를 만든다
  • interrupt가 생기면 CPU는 현재 처리하고 있던 프로세스를 얼마나 한지에 대해 ( 스레드가 관리하고 있는 program counter / 다음에 실행해야 할 instruction의 address ) CPU의 레지스터에 저장해놓은 뒤 멈추고, OS가 발생한 interrupt를 처리하기 위한 루틴을 로드하여 실행한다.
  • interrupt에 대한 루틴이 끝났으면 CPU는 이전에 저장한 PC를 로드하여 다음 해야할 instruction을 진행한다.
 

Signals

  • 이벤트가 발생했을 때, 시그널을 발생시킨다. ( Process or OS가 발생시킴 ⇒ Process에게 )
  • signal은 종종 interrupt가 발생했을 때, OS가 process에게 알려주는 수단
    • ex) ctrl + c를 누름 ⇒ OS가 프로세스에게 interrupt 시그널을 보냄 ⇒ 기본적으로는 process가 종료 됨
  • signal은 동기 / 비동기 적으로 돌아갈 수 있음
    • sync: illegal instruction / divide by zero
    • async: ctrl + c
 

Process, threads

  • Concurrent in UNIX
    • 프로세스를 여러개 생성할 수 있다. fork()
    • 프로세스 간에 정보를 주고 받을 필요성이 생길 때가 있다.
    • 프로세스들은 공통의 부모를 가지고 있다. ( tree 구조 )
      • 부모 자식간에 pipes를 통해서 커뮤니케이션이 가능하다.
    • 프로세스 간에 통신을 하기 위해서는 OS의 도움을 받아야 한다.
    • 프로세스는 기본적으로 메모리를 공유하지 않는다
  • 하나의 프로세스 안에 thread를 여러개 둬서 concurrency를 구현할 수 있다.
    • 태스크의 수행 시간. 즉 퍼포먼스를 올릴 수 있다.
 

The network as the computer

( scope를 벗어난 내용 )
  • concurrency + commication
  • client/server model
    • 서로 같은 컴퓨터 / 다른 컴퓨터 일 수 있다.
    • 서버 프로세스는 리소스를 관리한다.
    • 클라이언트 프로세스는 서버에 요청을 보냄으로써 리소스를 가져옴
 

Fault tolerance

  • 프로그래머가 오류 ( fault )가 날 수 있는 부분을 다 생각하지 못한 경우
    • 프로세스가 메모리를 할당받아서 진행하고 있는데, 메모리 공간은 제한적이다.
    • 프로세스가 실행이 되면서 버퍼 ( array, 동적 메모리 함수 )를 정상적으로 release를 하지 못했을 경우
  • program language 자체가 가지고 있는 제약사항 때문에
 

Buffer overflows

char buf[80]; printf("Enter your first name: "); scanf("%s", buf); // error scanf("%79s", buf); // 이와 같이 처리해야 함
string은 마지막에 null이 들어가기 때문에, 총 79바이트를 입력할 수 있다.
사용자가 79 바이트 이상을 입력하였을 때 buffer overflow
 

Consequences of buffer overflows

  • 함수 안에서 할당하는 변수의 경우는 stack에 할당이 된다.
  • stack은 high ⇒ low memory로 할당이 된다.
  • 스택에서 사용하는 공간이 여러 공간이 있기 때문에, 버퍼가 오버플로우 되면 어느 영역을 침범하느냐에 따라 오류가 다를 수 있다.
    • 어떤 문제가 일어날 지는 모른다
    • notion image
 

Example of buffer overflows

구현 프로그램 예시
비밀번호는 mypass이며, 비밀번호를 입력받아 맞으면 1, 틀리면 0을 return 한다.