[2025 사무자동화산업기사 필기] 운영체제

이기적 영진닷컴
21 팔로워
2024. 10. 21.
이 동영상은 [2025 이기적 사무자동화산업기사 필기 기본서)] 도서 내용을 바탕으로 제작되었습니다.
🔹 도서 자세히 보기 : http://www.yes24.com/Product/Goods/104404837
🔹 이 동영상이 포함된 재생목록 : https://youtube.com/playlist?list=PL6i7rGeEmTvr09yPV1T7G8GG1VxqqsMj7
🔹 모르는 문제? [이기적 스터디 카페] 질문하기 : https://cafe.naver.com/yjbooks
🔹 이기적 홈페이지 : https://license.youngjin.com
🔹 인스타그램 : https://www.instagram.com/license.youngjin_official/
이번 시간은 운영체제 관련해서 학습해 보도록 하겠습니다.
우리가 기본적으로 컴퓨터를 구성을 할 때에 하드웨어와 소프트웨어로 나누고
이 소프트웨어에 가장 바탕이 되는 것이 바로 시스템 소프트웨어, 그 중에서도 운영체제가 되겠죠.
운영체제의 형태들과 그리고 구성요소들, 그리고 프로세스 관리 부분에 대해서 중점적으로 보도록 하겠습니다.
가장 먼저 시스템 프로그램의 전반적인 사항을 한번 보도록 하겠습니다.
우리가 일반적으로 컴퓨터를 구성한다고 하면 하드웨어와 소프트웨어로 그 구성을 나누게 되는데요.
그 중에서 하드웨어는 처리 장치, 메모리, 입출력 장치 등의 기타 장치들로 크게 나눌 수가 있겠습니다.
그리고 소프트웨어는 시스템 소프트웨어와 응용 소프트웨어로 나뉘게 되는데요.
시스템 소프트웨어는 주로 운영체제 또는 기타 유틸리티들을 의미하고요.
그리고 그 이외에 나머지 모든 프로그램들을 응용 프로그램으로 구분 지을 수 있겠습니다.
그 중에 우리가 살펴볼 부분은 시스템 프로그램이 되겠고요.
기본적으로 하드웨어라고 하면 컴퓨터 시스템을 구성하는 기계적인 장치를 의미합니다.
그래서 중앙 처리 장치인 CPU, 그리고 기억 장치, 램이나 롱 등의 기억 장치들과 입출력 장치로 구성이 된다고 했고요.
소프트웨어라고 하면 시스템 소프트웨어와 응용 소프트웨어로 나뉘었습니다.
그래서 시스템 소프트웨어는 운영체제나 또는 컴파일러, 유틸리티 이런 것들이 해당하고요.
응용 소프트웨어는 그 이외에 특정한 작업을 수행하기 위해서 개발한 모든 프로그램들,
여러분들이 설치해서 사용하게 되는 거의 대부분, 모든 프로그램들이 응용 소프트웨어에 해당하겠고요.
그리고 이러한 시스템 소프트웨어라고 하면 컴퓨터를 효율적으로 운영할 수 있도록 도와주는 프로그램이라고 볼 수가 있겠습니다.
그래서 사용자가 이 시스템 프로그램, 즉 OS를 이용해서 복잡한 컴퓨터 내부의 처리 과정을 알 필요 없이 사용할 수 있고
응용 프로그램을 실행할 수 있다 라고 했죠. 자 이러한 시스템 소프트웨어의 종류 중에서 첫 번째로 어셈블러라는 것은요.
어셈블러는 어셈블리 언어로 작성된 원시 프로그램을 기계어로 번역해주는 그러한 역할을 담당합니다.
그리고 이 어셈블리 언어라고 하는 것은 기계어에 가깝긴 하지만 어떠한 기호로 만들어져 있어서
그것들로 우리가 프로그램을 구성할 수 있는 그런 언어다 라고 앞서서 학습을 하셨죠.
자 그리고 매크로나 로더, 링커도 마찬가지 시스템 소프트웨어의 분류로 넣을 수가 있겠는데요.
각각은 앞서서 여러분들이 한 번씩 다 보셨기 때문에 읽어보시고 어떠한 기능을 하는지 보시고 이해하시고 넘어가시면 되겠습니다.
매크로 같은 경우에는 연속적인 반복이 되는 그러한 작업들을 하나로 만들어 놓은 것을 말하고요.
그리고 로더와 링커는 목적 프로그램을 생성을 할 때 사용합니다. 즉 컴파일을 할 때 로더 같은 경우에는 주기역장치로 프로그램들을 적재시켜주는 역할을 담당하고
링커는 연결기능 즉 서로 다른 곳에 있는 프로그램들을 연결해서 하나의 실행 가능 프로그램으로 만들어주는
그러한 역할을 담당하고 있습니다. 자 이제 운영체제로 본격적으로 넘어가 보도록 하겠습니다.
운영체제라고 하면 기본적으로 컴퓨터 시스템 자원을 효율적으로 관리하고 그리고 사용자에게 편리함을 제공하고
그래서 컴퓨터와 사용자 간의 인터페이스를 담당하는 그러한 프로그램이다 라고 정의할 수가 있겠죠.
이런 운영체제는 자원관리자 그리고 제어 프로그램으로 볼 수가 있겠는데요.
그리고 자원관리자 같은 경우에는 CPU나 기역장치, 입출력장치 등의 자원을 할당하고 관리해주는 그런 역할을 수행을 하는 부분이 되겠습니다.
그리고 제어 프로그램은 입출력장치와 사용자 프로그램을 통제할 때 사용을 하고요.
그 이외에 나머지 컴퓨터와 사용자 간의 인터페이스도 역시 운영체제에 속해 있는 기능이죠.
그래서 사용자가 컴퓨터 시스템을 쉽게 사용할 수 있는 환경을 제공하는 역할을 한다.
그래서 인터페이스 중에서는 우리는 그래픽 유저 인터페이스에서 GUI 기능을 사용한다고 보시면 되겠습니다.
이렇게 우리가 운영체제를 사용하는 목적은요. 운영체제의 주 목적은 편리한 사용자 인터페이스 제공에 있다라고 했구요.
그래서 사용자가 시스템을 내부를 모르는 상태에서도 좀 더 편하게 사용하기 위해서 운영체제를 쓴다라고 보시면 되는데요.
운영체제의 성능평가 기준 잘 알아두세요. 시험에 자주 출재가 되겠습니다.
성능평가 기준의 첫 번째, 응답시간의 단축이죠.
즉 사용자가 컴퓨터의 어떤 일에 처리를 지시했을 때의 그 결과가 돌아올 때까지의 시간인데요.
이 응답시간을 단축시키는 것, 운영체제에서 중요한 기능, 그 평가 요소 중에 하나라고 보실 수가 있겠구요.
두 번째로는 처리 능력의 향상입니다. 즉 단위 시간 내에 최대한 많은 양의 일을 처리할 수 있게끔 시간을 단축시키고 능력을 향상시킨다는 것이
역시 평가 기준이 되겠구요. 그리고 신뢰도 향상, 즉 얼마만큼 고장 없이 주어진 기능을 정확하게 수행을 하는지, 내가 원하는 결과를
정확하게 얻을 수 있는지, 그리고 사용 가능도, 즉 시스템 자원이 요구하는 총 시간에 대해서 실제로 자원이 사용 가능한 시간도 역시 성능평가 기준에 들어가겠습니다.
그래서 우리가 운영체제 성능평가 기준이라고 하면 이렇게 4가지를 들 수가 있겠습니다. 반드시 잘 기억을 해 두시구요.
자 이러한 운영체제의 기능은 가볍게 한번 읽어 보시면 됩니다. 자원의 효율적 관리, 그리고 응용 프로그램의 실행을 제어하는 것도 역시 운영체제가
담당하고 있구요. 그리고 가장 큰 것이 바로 사용자와 컴퓨터 간의 인터페이스를 담당하고 있다라고 하는 것이죠.
자 그리고 그 이외에 나머지 하드웨어라든지 프로그램 등의 그런 관리도 역시 운영체제의 기능에 들어가겠습니다.
자 그래서 이러한 운영체제가 관리하는 자원은 총 4가지로 나누어 볼 수가 있겠습니다. 첫 번째로 프로세서 관리라고 되어 있는데 프로세서라고 하는 것은
어떠한 작업 단위를 말합니다. 그래서 어떤 작업을 어떤 순서대로 수행할 것인지 그런 작업 단위에 관련한 관리도 역시 운영체제가
관리하고 있구요. 자 그리고 두 번째로는 기억장치 관리, 그래서 기억장치의 공간에 대한 할당, 그리고 기억장치에서 데이터를 읽어드리는 이러한 것들을 모두 다 운영체제가
관리한다고 볼 수가 있겠구요. 그리고 세 번째로 입출력 장치에 대한 관리와 그리고 파일에 대한 관리 마찬가지죠.
그래서 이 4가지를 운영체제가 관리하는 자원으로 분류해서 볼 수가 있겠습니다.
자 이런 운영체제는 운영 방식을 역시 나누어서 볼 수가 있겠는데요. 운영체제의 운영 방식은 앞에서도 여러분들이 한번 보신 적이 있으시죠.
한번 쭉 읽어 보도록 하겠습니다. 가장 먼저 일괄 처리 시스템은 가장 단순한 어떤 처리 시스템이라고 볼 수 있겠는데요.
처리할 작업을 한꺼번에 모아서 한꺼번에 처리를 해가는 그러한 방식이 되겠습니다.
그래서 처리하는 시간이 굉장히 오래 걸린다는 단점이 있겠죠. 실시간 시스템의 경우에는 데이터가 발생되는 즉시 처리해 준다.
자 이러한 실시간 시스템 같은 경우에는요. 만약에 긴 작업이 한번 들어왔다. 그러면 그 뒤에 짧은 작업이 대기할 때 대기 시간이 너무 오래 길어진다 라는 단점이 있겠습니다.
자 다중 프로그래밍 시스템은요. 하나의 컴퓨터에 2개 이상의 프로그램을 적대시켜서 처리하는 방식이다.
그래서 CPU 하나가 2개의 프로그램을 번갈아 가면서 실행을 하는 그러한 방식이 되겠고요.
시문화 시스템 마찬가지로 하나의 시스템을 사용하는 방식인데 여러 명의 사용자에게 시간을 분할해서 마치 동시에 작업하는 것처럼 보이지만 실제로는 순간순간마다 다른 작업을 수행을 하고 있는 그러한 방식이 되겠습니다.
자 그리고 분산 시스템은 여러 대의 분산된 컴퓨터에 여러 작업들을 분산시켜서 처리하는 그러한 시스템이 되겠는데요.
자 이때에는 데이터가 분산이 되기 때문에 데이터의 무결성이라든지 혹은 보안 이런 문제들을 잘 처리할 수 있어야 되겠죠.
자 그리고 마지막으로 병열 처리 시스템은 서로 연결된 2개 이상의 처리기에서 2개 이상의 프로세스를 동시에 수행하는 그러한 방식입니다.
그래서 속도도 올라가게 되겠고 효율성도 높아지게 되는 그러한 처리 방식이 되겠죠.
그래서 이러한 것들이 모두 다 운영체제의 처리 방식에 들어가겠습니다.
자 운영체제의 구성은 컴퓨터 시스템 전체의 운영 효율을 최대화하는 목표로 통합된 운영체제는 보는 관점에 따라서 다양한 형태로 구성이 된다고 되어 있는데요.
일반적으로는 제어 프로그램 그리고 처리 프로그램으로 나누어집니다.
그래서 수행하는 기능에 따른 분류라고 볼 수 있겠습니다.
자 먼저 제어 프로그램이다 라고 하는 것은 운영체제 내에서의 제어 프로그램은 말 그대로 시스템 전체의 동작 상태를 감시하고 감독하고 그리고 자원을 관리하는 그러한 프로그램이 되겠습니다.
그래서 제어 프로그램 내에는 감시 프로그램이 있고 작업 관리 프로그램이 있구요.
자 그리고 데이터 관리 프로그램이 있는데요.
자 먼저 감시 프로그램은 제어 프로그램 내에서의 중추적인 역할을 담당하는데 처리 프로그램의 실행 과정 그리고 시스템 전체의 동작 상태를 전체적으로 감시하는 그러한 역할을 하겠습니다.
자 그리고 작업 관리 프로그램은 어떤 작업이 실행된 뒤에 다음에 실행할 작업을 선택하거나 또는 작업의 시작이나 종료 또는 실행 정지
이러한 스케줄러 역할을 담당하는 것이 바로 작업 관리 프로그램입니다.
그래서 실제적으로는 여러분들이 작업을 동시에 처리하는 것이 아니라 대기 중인 다른 작업과 현재 처리 중인 작업에 재빠른 교체가 일어나면서
마치 여러 작업을 동시에 하는 것처럼 보여주죠.
그래서 그럴 때에 스케줄링을 담당하는 것이 바로 작업 관리 프로그램이 하는 기능이 되겠습니다.
반면에 데이터도 역시 동시 접근하는 것이 가능하겠죠.
그럴 때에는 데이터 관리 프로그램이 그러한 데이터들을 접근이나 그런 제안들을 하게 되는데요.
이때 데이터 관리 프로그램은 주기역장치 그리고 보조기역장치 사이에서 자료 전송이나 또는 보조기역장치에 저장되어 있는 자료의 갱신,
그리고 유지를 담당을 하고 입출역시의 오류를 처리한다.
즉 네컨드에 저장되어 있는 또는 메인 메모리에 현재 적재되어 있는 그러한 데이터들을 전체적으로 관리하는 프로그램이다라고 볼 수가 있겠습니다.
두 번째로 운영체제 구성요소 중에서 처리 프로그램입니다.
이러한 처리 프로그램은 제어 프로그램의 감독하에 특정한 문제를 해결하기 위해서 데이터 처리를 담당하는 프로그램이다 라고 했는데요.
말 그대로 여러분들이 어떠한 수행을 하는 어떤 기능을 수행하는 그런 프로그램이라고 볼 수가 있겠구요.
첫 번째로 언어 번역 프로그램은 특정 언어로 작성된 프로그램을 다른 프로그램으로 변경해주는 번역 프로그램이 되겠습니다.
서비스 프로그램은 사용자가 컴퓨터를 더 쉽게 사용할 수 있도록 해서 어떤 기능을 프로그램으로 구현을 해 놓은 그러한 프로그램이 되겠구요.
문제 처리 프로그램은 사용자 자신이 업무상 필요에 따라서 작성한 프로그램 즉 응용 프로그램이 문제 처리 프로그램이 되겠습니다.
운영체제 구성요소들을 여러분들이 살펴 보셨구요.
운영체제 구성요소에서 제어 프로그램과 처리 프로그램으로 나누어서 각각의 종류들이 3가지씩 어떤 것들이 있는지를 잘 기억을 해주시면 되겠습니다.
다음은 운영체제에서 굉장히 중요한 개념 중에 하나인 프로세스와 그 프로세스 관리에 대해서 살펴보도록 하겠습니다.
기본적으로 우리가 프로세스가 무엇이냐 하는 것은요. 프로세스라고 하면은 실행중인 프로그램이다 라고 할 수가 있겠는데요.
현재 실행중인 즉 프로세서가 할당된 개체를 우리가 프로세스라고 합니다. 즉 현재 실행중의 작업 단위를 말할 수가 있겠는데요.
이때는 운영체제가 관리하는 실행 단위가 바로 프로세스다 라고 보시면 되겠죠.
그래서 이러한 프로세스는 3가지 상태를 함께 공유를 하면서 이 프로세스가 관리가 되는데요.
프로세스가 실행 상태에 있을 때에는 말 그대로 연산이 수행이 되고 있는 상태에 해당하겠죠.
하지만 이 실행 상태라고 해서 이 실행이 끝날 때까지 즉 프로그램이 끝날 때까지 계속 실행 상태에 있다면 다른 작업들에 해당하는 프로세서들이 실행 될 수가 없겠죠.
그렇기 때문에 이 프로세스는 실행 상태와 준비 상태 그리고 대기 상태 3가지의 상태를 번갈아 가면서 변경을 하게 됩니다.
그래서 프로세스가 가장 먼저 대기 상태에 있을 때에는 현재는 실행되지 않은 상태죠.
이 대기 상태에 있다가 준비 단계로 넘어옵니다. 그래서 준비 단계에서 프로세스가 할당을 받게 되면 실행 상태가 되겠죠.
이때 실행 상태로 가는 것은 디스패치라고 하는 어떤 스케줄러에 의해서 실행 상태가 됩니다. 즉 준비 단계에 있는 프로세서 굉장히 많겠죠.
그 중에서 스케줄러에 의해서 하나가 선택되어서 실행이 됩니다. 그리고 어느 정도 실행을 하던 중에 예를 들어서 다른 프로세서가 다시 실행 상태로 올라가야 된다 그러면
실행하던 프로세서는 다시 준비 상태로 내려가게 되고 다른 프로세서가 다시 실행이 되겠죠.
이러한 것들을 반복하는 중에 해당하는 지금 현재 실행 중인 프로세스 중에 하나가 어떤 자원을 할당 받거나 또는 키보드에 입력을 받아야 된다.
입력 같은 것들이 필요한 경우나 혹은 출력이 필요한 경우는 더 이상 실행 상태에 있을 의미가 없죠.
준비 상태로 가더라도 다시 실행 상태로 올라와도 키보드 입력을 또 받아야 되기 때문에 또 계속해서 기다릴 수 밖에 없어요.
데이터나 혹은 입출력 상태를 기다릴 때에는 이렇게 대기 상태로 넘어가게 됩니다.
블록된다고 하는데요.
대기 상태로 넘어가서 키보드에 입력 또는 내가 원하는 데이터를 기다리는 거죠.
자원을 기다리다가 그 자원이 준비가 되면 다시 준비 상태로 넘어가서 다른 프로세서들과 순서를 다시 스케줄에 의해서 정하게 됩니다.
네 순서가 되면 다시 실행이 된다는 거죠.
그래서 이 세 가지 상태를 프로세서가 계속해서 변경하면서 변경이 되면서 어떠한 프로그램이 실행이 된다는 게 바로 프로세서의 상태 변화가 되겠습니다.
자 이때 여러분들이 이 대기 상태에서 준비 상태로 간 다음에 준비 단계에 있는 여러 개의 프로세서들 중에서 누구를 실행할 것이고 누구를 다시 준비 상태로 내리느냐는
스케줄러에 의해서 결정이 됩니다. 사용자가 즉 내가 원하는 대로 조절을 할 수 없다라는 것이죠.
자 프로세서 제어 블록의 정의 부분을 보겠습니다.
프로세서 제어 블록이라고 하는 것은 운영체제가 프로세서에 대한 중요한 정보를 저장해 놓은 자료구조다 라고 볼 수가 있겠는데요.
여기에는 프로세서의 이름 그리고 프로세서의 우선순위 그리고 현재 상태와 프로세서의 부모나 자식에 대한 정보
그리고 위치한 주기역 장소의 영역 프로그램 카운터. 프로그램 카운터는 다음에 실행할 프로그램의 주소가 저장되어 있는 공간이죠.
자 그리고 cpu의 레지스터 할당된 자원의 정보 등등을 프로세서 제어 블록이 가지고 있습니다.
그래서 프로세서 제어 블록에서 이런 것들을 이용을 해서 어떠한 우선순위를 읽어드려서 실행 상태든지 혹은 준비상태로 전환을 하게 되는 거죠.
자 이번에는 인터럭트로 가겠습니다. 자 프로세서와 상관없이 인터럭트만 여러분들이 개념을 따로 보자면 컴퓨터 시스템에서 발생하는 예외적인 사건입니다.
그래서 이러한 예외적인 사건을 운영체제에 의해서 적절히 처리하기 위한 기법이다라고 볼 수가 있겠는데요.
자 인터럭트 처리를 그러한 처리 기법이라고 보면은 인터럭트라고 하는 것은 그 예외적인 사건 자체를 의미하는 바겠죠.
자 이러한 인터럭트가 발생한다라고 하면은 인터럭트 처리 루틴을 먼저 수행하고 원래 프로그램을 복귀한다.
그래서 프로그램이 절차적으로 쭉 수행이 되는 중에 여기서 인터럭트가 발생했다 그러면 인터럭트를 처리할 수 있는 어떤 루틴을 호출합니다.
실행을 하겠죠. 그런 다음에 실행이 끝나면 다시 원래 상태로 돌아와서 나머지 프로그램들을 실행하는 이러한 상태가 되겠습니다.
자 인터럭트 처리 과정은요. 먼저 내가 프로그램을 실행하는 중에 프로그램을 중단을 시켜야겠죠.
인터럭트가 발생했다라고 한다면은 프로그램 중단을 시키고 인터럭트 처리를 해야 할 겁니다.
자 그리고 인터럭트를 수행한다라고 하는 것은 인터럭트 처리 루틴을 수행한다라는게 되겠죠.
끝나면 다시 프로그램이 재실행되는 이러한 과정을 거치게 되겠습니다.
자 그러한 인터럭트의 종류들에는요. 가장 첫번째로 슈퍼바이저 호출을 들 수가 있겠는데요.
이 슈퍼바이저 호출은 소프트웨어 인터럭트로 사용자 프로그램 명령어에 의해서 발생합니다.
입출력 수행이나 또는 기업장치 할당 또는 오퍼레이터와의 대화 등을 위해서 발생하는 그러한 호출 인터럭트가 되겠습니다.
자 그리고 입출력 인터럭트는요. 입출력 요구가 완료되었을 때 입출력 장치가 인터럭트를 발생을 시킵니다.
그래서 입력을 받기 위해서 대기 중인 어떤 프로세스가 있다면 입출력 인터럭트를 발생을 시켜서 입력이 완료되었다라고 하는 것을 알려주는 거죠.
그래서 프로세스에게 채널이나 입출력 기기의 상태 변화를 알려주는 것을 말합니다.
외부 인터럭트는 말 그대로 외부 장치에 의해서 발생하는데요.
타이머에서 일정 시간이 닿은 경우, 오퍼레이터가 콘솔에서 인터럭트 키를 누른 경우,
그리고 다중 처리 시스템에서 프로세서로부터 신호가 왔을 경우, 그럴 때 외부에 의해서 발생하는 그러한 인터럭트를 말합니다.
그리고 제시적 인터럭트는 제시적 버튼을 누를 때에 발생하겠죠.
그래서 이런 하드웨어적인 인터럭트 같은 경우에는 다른 인터럭트에 비해서 가장 우선시 처리해야 하는 그러한 인터럭트라고 볼 수가 있겠습니다.
그리고 그 이외에도 프로그램 검사 인터럭트나 기계 검사 인터럭트가 있겠죠.
그래서 우리가 프로세서라던지, 프로세스라던지 혹은 인터럭트를 처리할 때에 어떠한 처리 순서를 정할 때에 스케줄링을 한다고 할 수가 있겠는데요.
여기서 얘기하는 스케줄링이라고 하는 것은 컴퓨터 시스템의 모든 자원의 성능을 높이기 위해서 사용 순서를 결정하기 위한 정책이다라고 볼 수 있겠습니다.
이때 스케줄러가 하는 역할은요. 먼저 프로세스 스케줄러는 대기상태에 있는 프로세스들 중에서 어느 프로세서가 먼저 실행상태에 놓일 수 있는 프로세서를 차지할 수 있을지를 결정을 지어줍니다.
그래서 3개의 상태 중에서 우리가 준비상태, 대기상태가 있었고 실행상태가 있었는데 실행상태와 대기상태를 전이할 수 있는 그러한 순서를 결정을 지어준다는 거죠.
그리고 작업 스케줄러는 어떤 작업이 시스템 내 자원을 이용할 수 있도록 할 것인가를 결정 지어줄 때 사용이 되겠습니다.
이때 스케줄링 기법은 몇 가지가 있는데요. 스케줄링 기법은 여러분들이 쭉 읽어 보시면 되겠습니다.
첫 번째로 선점형 스케줄링 기법은요. 하나의 프로세스가 CPU를 점유하고 있을 때 다른 프로세스가 CPU를 빼앗을 수 있는 스케줄링 기법이 되겠습니다.
그래서 교환이 많이 일어나겠죠. 빠른 응답 시간이 필요할 때 사용을 하고요. 대신에 스케줄링이 빈번하게 일어나기 때문에 오버헤드가 생길 수가 있다는 거고요.
하지만 장점은 우선순위가 높은 프로세스가 먼저 수행이 될 수 있다. 그래서 그런 경우에 많이 사용이 된다고 하는 것이죠.
대표적인 기법으로는 라운드 로빈이라든지 MFQ 등의 그런 방식이 있겠습니다.
반면에 비선점형 스케줄링은 말 그대로 한 개의 프로세스가 CPU를 점유하고 있을 때에 해당하는 작업이 완료될 때까지 할 수 없는
그러한 스케줄링 기법이 되겠습니다. 그래서 작업시간이 짧은 경우에는 긴 작업을 기다리는 경우,
작업시간이 짧은 것이 앞서 있는 긴 작업을 기다려야 하는 그런 경우들이 발생을 할 수가 있겠죠.
그래서 응답 시간이 길어질 수 있다는 단점은 있겠습니다. 그리고 그러한 스케줄링 기법에 따라서 우리가 교착 상태가 되기도 하는데요.
대드락 상태, 이 대드락 상태라고 하는 것은 동일한 자원을 공유하고 있는 둘 이상의 프로세스들이
서로 다른 프로세스를 차지하고 있는 자원을 서로 무한정 기다리고 있다. 그래서 프로세스의 진행이 중지된 상태를 의미한다고 했죠.
즉 교착 상태라고 하는 것은 프로세스가 자원 하나를 공유를 하고 있습니다. 그래서 이 자원을 가지고 와야 되는데
가지고 올 수 없는 상태죠. 그래서 서로 자원을 쟁취하려고 하는 그 상태. 그래서 둘 다 진행이 되지 않는 상태를 우리가 교착상태라고
정의할 수가 있겠습니다. 자 이러한 교착상태가 되기 위한 조건은요. 먼저 첫 번째로 상호 배제 조건이 있는데요.
이것은 프로세스들이 필요로 하는 자원에 대해서 배타적인 통제권을 요구한다. 그래서 한 프로세스가 사용 중이면 다른 프로세스는
반드시 기다려야 한다라고 하는 것이 교착상태 발생 조건 중에 상호 배제 조건이 되겠고요.
두 번째로는 점유와 대기 조건, 즉 프로세스가 적어도 하나 이상의 자원을 할당받은 채 다른 프로세스의 자원이 해제되기를 기다리는 경우가 되겠습니다.
그리고 비선점 조건은 프로세스가 점유한 자원이 사용이 끝날 때까지 해제할 수 없는 경우
그리고 환영대기 조건은 프로세스에 환영사슬이 존재해서 이를 구성하는 각 프로세스는 사슬 내 다음에 있는 프로세스가 요구하는 하나 또는 그 이상의 자원을 갖고 있는 그런 경우
그래서 이 네 가지가 교착상태의 발생 조건인데요. 여러분들이 교착상태 발생 조건은 시험에 자주 등장하기 때문에 이렇게 조건만이라도 잘 기억을 해 두시기 바랍니다.
그래서 교착상태 해결책은 총 네 가지로 나누어서 볼 수 있겠습니다. 먼저 교착상태 예방 그리고 교착상태 회피
그리고 교착상태 발견 그리고 교착상태 회복 이렇게 네 가지로 참고적으로 보시면 되겠습니다.
여기까지 해서 운영체제와 프로세스 관리에 대해서 보셨구요. 마지막으로 운영체제가 관리하는 작업 중에서 기억장치에 대한 부분을 보고 가도록 하겠습니다.
기억장치에 대해서는 앞서서도 많이 학습을 하셨기 때문에 대부분의 내용들은 여러분들이 아마 익숙하게 보셨을 내용들이세요.
자 먼저 기억장치의 계층구조 기억장치라고 하는 것은 계층구조를 가지고 있죠. 그래서 속도나 비용에 따라서 분류를 할 수가 있겠는데요.
가장 쉽게 여러분들이 삼각형 구조로 그리시면 되겠습니다. 제일 아래에는 보조 기억장치가 되겠죠.
그리고 그 다음은 주 기억장치 램이라던지 롬의 주 기억장치 그리고 캐시 메모리 그리고 레지스터 이렇게 삼각형의 구조로 그려보시면 되겠습니다.
그래서 계층이 올라갈수록 가격이 비싸지면서 속도는 빨라지죠. 하지만 보시는 것처럼 용량은 점점 작아집니다.
즉 속도가 느릴수록 그리고 가격이 싸질수록 용량은 점점 많아진다고 하는 것인데요. 아래에 있는 그림도 같은 것들을 표현을 하고 있죠.
그래서 중앙처리장치 CPU라고 되어 있는데 레지스터를 말합니다. 중앙처리장치 내에 있는 레지스터 그리고 캐시 메모리 주 기억장치 보조 기억장치의 순서대로
메모리 구조도를 기억을 하시면 되겠습니다. 그래서 각각의 중앙처리장치에 대한 특징들이 나와 있는데요.
하드웨어 적인 부분들은 넘어가도록 하겠습니다. 기억장치하고는 별개의 문제들이기 때문에 한번 읽어보시고요.
주 기억장치를 관리할 때의 관리 전략입니다. 첫 번째로 인출 전략 즉 주 기억장치에 넣을 프로그램이나 또는 데이터를 언제 보조 기억장치에서 주 기억장치로 옮길 것인가.
즉 우리가 데이터를 읽어드릴 때에 보조 기억장치에 들어있는 데이터를 다이렉트로 읽어드릴 수가 없죠.
반드시 보조 기억장치에 있는 어떤 데이터를 주 기억장치로 옮깁니다. 옮겨진 데이터를 CPU가 이용을 해서 연산을 수행한다고 하는 것이 방법인데요.
이때 가지고 오는 보조 기억장치에서 주 기억장치로 옮기는 이것을 인출 전략이라고 볼 수 있겠죠.
그래서 인출 전략은요. 먼저 요구 반입 전략과 예상 반입 전략 두가지로 나누어서 볼 수가 있겠습니다.
두 번째로는 배치 전략입니다. 배치 전략은 새로 반입된 프로그램을 주 기억장치 내에 어디에 위치시킬 것인가를 결정하는 전략이다 라고 했구요.
그래서 이 전략도 마찬가지로 세 가지 최소 적합 전략, 최적 적합 전략, 그리고 최악 적합 전략 세 가지로 구분 지어서 보고 있습니다.
그래서 배치 전략을 위해서 우리가 메인 메모리로 이동이 된 해당하는 데이터들의 순서나 혹은 위치에 따라서 CPU에서 읽어드릴 때 속도가 차이나기 때문에
어떻게 위치시킬지도 굉장히 중요하다 라고 볼 수가 있겠습니다.
자 그리고 교체 전략은요. 새로 주 기억장치에 배치되어야 할 프로그램이 들어갈 장소를 마련하기 위해서 어떤 프로그램과 데이터를 제거할 것인가.
자 그래서 우리가 주 기억장치의 용량은 한정이 되어 있죠. 그래서 이렇게 한정된 기억 공간이 가득 찼다 라고 했을 때에
예를 들어 제일 아래는 윈도우, 운영체제가 아마 저장이 되어 있을 겁니다.
항상 컴퓨터를 부팅했을 때 가장 먼저 부팅이 되고 기본적으로 필요한 것이 바로 운영체제이기 때문에 운영체제가 제일 아래쪽에 들어가 있겠구요.
그 위에 뭐 내가 한글 프로그램을 실행시켰다 그러면 한글이, 그리고 어떤 데이터를 썼다 그러면 데이터가.
이런 식으로 가득 차있을 경우에 가장 자주 사용하지 않고 그리고 가장 접근이 떨어지는 그런 값을 다시 보조 기억장치로 보내겠죠.
자 그리고 내가 필요한 데이터를 다시 가져다가 그곳에다가 삽입을 할 겁니다. 이때에 교체할 때에 그 전략에 관련한 부분이죠.
자 이렇게 기억장치의 용량이 한정이 되어 있기 때문에 우리가 사용하는 방식이 또 가상 기억장치라는 방식이 있는데요.
가상 기억장치라고 하면은 프로세스의 일부분을 주 기억장치에 적재합니다. 그리고 필요한 나머지 부분을 디스크 즉 우리 보조 기억장치와
주 기억장치 사이에서 교체 가면서 사용하는 기법인데요. 그래서 사용자가 주 기억장치의 용량에 구애받지 않고 사용할 수 있는 그러한 방식이 되겠습니다.
이러한 가상 기억장치는 프로세스의 논리 공간에서 사용된 주소를 가상 주소라고 하고 이런 가상 주소를 메모리 내 실 주소로 변환하기 위해서
주소 사상 기구를 사용한다고 되어 있는데요. 그러한 기법에는 페이징 기법 그리고 세그먼팅 기법을 사용할 수가 있겠습니다.
자 페이징 기법 그리고 세그먼테이션 기법과 페이지 교체 알고리즘 부분을 보실 텐데요.
우리가 가상 기억장치 즉 보조 기억장치 중에 일부를 주 기억장치처럼 사용을 하기 때문에 데이터를 보조 기억장치에서 주 기억장치로 교환하는 어떠한 알고리즘이 필요할 겁니다.
그때 사용할 수 있는 알고리즘 중에 첫번째가 페이징 기법인데요. 기억장소를 일정한 크기로 분할을 해서 사용을 하는 방식입니다.
그래서 가상 주소 공간 내에 페이지들이 주 기억장치의 어느 페이지 프레임에 맵핑 되는가를 알기 위해서 페이지 사상표나 또는 연관 사상표를 이용을 합니다.
반면에 세그먼테이션 기법 같은 경우에는 사용자 주소 공간을 일정한 크기로 나누어서 사용하는 방식이구요.
그래서 페이지 상호간의 결합도가 높다 라고 했구요. 결속도는 낮아지게 되는 페이지와 달리 결속도를 높이기 위해서
사용자 주소 공간을 논리적인 단위로 나누는 세그먼트를 이용하는 기법이다 라고 했습니다.
그래서 세그먼테이션 기법과 페이지 기법 두가지가 있다라고 하는거 기억을 하시면 되겠구요.
이러한 페이지 교체 알고리즘은 주 기억장치의 빈 공간이 있을 때에는 해당 페이지나 세그먼트를 해당 위치에 배치하고
빈 공간이 없을 때 주 기억장치 내에 빈 공간이 없을 때에는 불필요한 블록을 디스크로 이동시킨다.
그래서 페이지가 계속해서 교체되는 페이지 교체 알고리즘에 의해서 구현이 된다 라고 했죠.
그래서 이러한 방식으로 우리가 가상 기억장치를 사용을 하게 됩니다.
그래서 여러분들이 기억장치의 구성요소 구조로 볼 때에 기억장치의 계층구조를 볼 때에
기본적으로 보조 기억장치 그리고 주 기억장치 캐쉬 메모리 그리고 레지스터가 사용이 되고
그 이외에도 주 기억장치의 용량이 마치 큰 것처럼 사용할 수 있는 가상 기억장치가 있다라고 하는 것을
이번 학습에서 기억을 하시면 되겠습니다.
여기까지 해서 운영체제와 메모리 관리 부분에 대해서 학습하셨습니다.
이번 시간은 여기까지 하고 마치겠습니다.
여러분 수고하셨습니다.
