기술의 발전에 따라 OS에서는 아래 3가지의 기술이 중요해졌다.
통신은 한 매체에서 다른 매체로 정보를 보내는 기술을 의미한다. 여기서는 컴퓨터와 컴퓨터간의 통신 뿐만 아니라, 컴퓨터 안의 프로세스와 프로세스 사이에서 정보를 주고 받는 과정 또한 통신이라고 한다.
리소스를 공유함으로써, 실제로는 한 프로세스만 시행하지만 동시에 시행되는 것처럼 보이게 해주는 것을 concurrency라고 부른다. 프로세스가 끝나기 전에 대기하고 있는 다른 프로세스를 같이 시행해 줌으로써 동시에 시행되는 것처럼 보이게 한다. 이런 기술을 Time sharing 이라고 주른다. 진짜 동시에 수행되는 건 parallel task라고 부른다. CPU, data등이 해당된다.
Asynchronous는 이벤트들이 예정되지 않은 시간에 예정되지 않은 명령을 받고 실행되는 것을 의미한다. Asynchronous operation는 언제 실행되는 지 예측할 수 없는 이벤트가 실행되었을 때 잘 실행되도록 하는 기술을 말한다. 키보드 입력이나 인쇄 요청등이 해당된다.
이벤트를 처리하는 방법 중 제일 쉬운 것은 이벤트가 들어오기 전까지 대기하는 것이지만, 마냥 대기하는 건 컴퓨터의 성능을 많이 잡아먹기 때문에 처리하는 기능을 잘 구현해야 한다.
OS의 성능을 측정할 때 대부분 시간과 속도를 기준으로 성능을 측정한다.
OS가 관리하는 시스템 리소스는 s/w와 h/w 두가지가 있다. 하드 디스크와 CPU가 계속해서 발전하면서 OS의 성능은 대부분 높아졌다. 디스크를 읽는 시간과 받아오는 시간 등은 올라가긴 했지만, 물리적인 특성상 읽는 시간이 많이 발전하지는 않았다. 이와 반대로 CPU의 속도는 기하급수적으로 발달했다.
CPU에서 동시에 여러개의 프로세스를 실행하는 것 같은 착각을 주는 기술이다. CPU하나는 원래 하나의 프로세스만 수행할 수 있지만, 타임 쉐어링을 통해 여러 프로세스를 스위칭하면서 사람 눈에는 동시에 프로세스를 실행하는 듯 느끼게 만든다.
특정한 이벤트가 발생했을 때 interrupt라는 과정을 통해 이벤트가 발생했음을 알리는 기술이다.
시그널은 이벤트가 발생했을 때 사용하는 소프트웨어적인 통제수단이다.
Concurrency와 Communication을 통해 서로 다른 어플리케이션들끼리 만날 수 있다. 가장 기본적인 모델은 client/server model이다. 서버는 리소스를 주는 자이고, 클라이언트는 받는 자이다. 서버는 요청을 받고, 그에 대한 응답을 해줄 수 있다.
오류가 발생해도 프로세스나 어플리케이션이 잘 돌아가도록 해주는 것을 Fault tolerance라고 한다. Fault가 발생하는 이유는 여러가지가 있다.
C에서 char배열을 이용해서 문자열을 받을 때, null캐릭터가 들어가야 하므로 n개의 배열을 만들면 n-1개를 넣을 수 있다. 그러나 n개 이상의 문자열을 넣으면 buffer overflow가 일어난다.
배열에 문자열을 받는 행동은 stack에 값을 저장한다는 의미다. 이 stack에는 변수나, return address나, 다른 메모리가 들어가 있을 수 있다. buffer overflow가 일어나면 이러한 지점들을 침범하므로 프로그램이 죽거나 많은 버그가 일어날 수 있다.