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로 할당이 된다.
- 스택에서 사용하는 공간이 여러 공간이 있기 때문에, 버퍼가 오버플로우 되면 어느 영역을 침범하느냐에 따라 오류가 다를 수 있다.
- 어떤 문제가 일어날 지는 모른다
Example of buffer overflows
구현 프로그램 예시
비밀번호는 mypass이며, 비밀번호를 입력받아 맞으면 1, 틀리면 0을 return 한다.