프로그래밍 언어 활용 5강. 운영체제와 네트워크 기초
운영체제는 컴퓨터에서 가장 큰 프로그램이면서, 사용자가 가장 의식하지 않는 프로그램입니다. 잘 만든 중재자는 원래 눈에 띄지 않죠.
풀고 시작
운영체제는 자원을 나눠 주는 심판입니다
운영체제의 일은 하나로 요약됩니다. 한정된 자원인 프로세서와 메모리와 입출력 장치를 여러 프로그램에 공정하고 효율적으로 나눠 주는 것이죠. 성능을 재는 잣대도 정해져 있습니다. 단위 시간당 처리량, 작업을 맡긴 뒤 결과가 나올 때까지의 반환 시간, 자원을 얼마나 놀리지 않는지 보는 사용 가능도, 그리고 신뢰도입니다.
프로세스는 실행 중인 프로그램입니다. 생성, 준비, 실행, 대기, 종료의 상태를 오가죠. 실행 중이던 프로세스가 물러나고 다른 프로세스가 올라올 때 레지스터 값 같은 상태를 저장하고 복원하는 일을 문맥 교환(context switching)이라고 합니다. 잦으면 그 자체가 비용이 됩니다.
스레드는 프로세스 안의 실행 흐름입니다. 같은 프로세스의 스레드들은 메모리를 공유하므로 생성과 전환이 가볍습니다. 그래서 프로세스를 여럿 띄우는 대신 스레드를 나누는 방식이 널리 쓰이죠.
누구를 먼저 실행할지 정하는 것이 스케줄링입니다. 실행 중인 프로세스를 강제로 뺏을 수 있는지에 따라 둘로 갈립니다.
| 구분 | 기법 | 특징 |
|---|---|---|
| 비선점 | FCFS | 먼저 온 순서대로 처리한다 |
| 비선점 | SJF | 실행 시간이 짧은 것을 먼저 처리한다 |
| 비선점 | HRN | 대기 시간을 함께 고려해 SJF의 무한 대기를 보완한다 |
| 선점 | 라운드 로빈 | 정해진 시간만큼 돌아가며 실행한다 |
| 선점 | SRT | 남은 실행 시간이 가장 짧은 것에 프로세서를 준다 |
SJF는 평균 대기 시간이 가장 짧지만 긴 작업이 계속 밀리는 기아 현상이 생깁니다. 이를 막으려고 기다린 시간이 길수록 우선순위를 올려 주는 에이징을 씁니다.
메모리는 쪼개서 씁니다
프로그램은 메모리보다 큽니다. 그래서 가상 기억 장치를 씁니다. 프로그램을 조각내어 필요한 부분만 주기억 장치에 올리는 것이죠. 조각을 같은 크기로 자르면 페이징, 논리적 단위로 자르면 세그먼테이션입니다.
필요한 페이지가 메모리에 없으면 페이지 부재가 나고 디스크에서 가져와야 합니다. 자리가 없으면 누군가를 내보내야 하는데 그 기준이 앞의 페이지 교체 알고리즘입니다. 그런데 프레임을 늘렸는데 오히려 페이지 부재가 늘어나는 이상한 일이 FIFO에서 관측됐습니다. 발견자의 이름을 따 벨레이디의 이상 현상이라 부르죠. 알고리즘이 직관을 배신한 유명한 사례입니다.
페이지 교체가 지나치게 잦아 정작 일은 못 하고 페이지만 들락거리는 상태를 스래싱이라고 합니다. 대책은 프로그램이 당장 참조하는 페이지 집합인 워킹 세트를 메모리에 확보해 주는 것입니다.
네트워크는 계층으로 쌓습니다
통신을 한 덩어리로 다루면 복잡해서, 국제 표준화 기구는 일곱 층으로 나눴습니다. 아래부터 물리, 데이터 링크, 네트워크, 전송, 세션, 표현, 응용입니다. 층을 나눈 이유는 아래가 바뀌어도 위가 안 흔들리게 하려는 것으로, 앞서 배운 계층 구조의 원리와 같습니다.
시험에는 각 층의 대표 장비와 프로토콜을 짝짓는 문제가 나옵니다. 물리 계층에는 리피터와 허브, 데이터 링크 계층에는 브리지와 스위치, 네트워크 계층에는 라우터가 놓입니다. 전송 계층에는 TCP와 UDP가 있죠. TCP는 연결을 맺고 순서와 도착을 보장하는 대신 느리고, UDP는 연결 없이 보내 빠른 대신 보장하지 않습니다. 영상 통화가 UDP를 쓰는 이유는 늦게 도착한 화면은 이미 쓸모가 없기 때문입니다.
주소 체계도 정리해 두시죠. IPv4는 32비트라 약 43억 개인데 이미 고갈되었고, IPv6는 128비트로 사실상 무한합니다. IPv6는 주소가 넉넉해진 것 외에 보안과 품질 보장 기능이 기본으로 들어 있고, 주소 자동 설정을 지원합니다.
여기까지가 4과목입니다. 다음 과목에서는 이 모든 것을 조직 차원에서 관리하는 정보시스템 구축관리로 넘어갑니다.
인출 문제
생각해볼 질문 (정답 없음)
라운드 로빈은 모두에게 같은 시간을 줍니다. 공정하지만 급한 일이 늦어지죠. 자원 배분에서 공정과 효율이 부딪힐 때 무엇을 기준으로 삼아야 할까요.
이전: 4강 객체지향과 예외 처리 · 다음: 5과목 1강 개발 방법론과 프로세스 개선