목차
📂 content
1. 운영체제란 무엇인가?
컴퓨터 하드 웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
• 사용자가 컴퓨터 하드웨어에 대한 자세한 사항을 몰라도 편하게 사용할 수 있는 역할을 함.
• 운영체제는 하나의 소프트웨어인데 다른 응용소프트웨어들과는 다르게 하드웨어(CPU, 메모리, 하드디스크)를 직접 관리하고 사용자들에게는 편리한 인터페이스를 제공해주기 때문에 까다로운 소프트웨어이다.
2. 운영 체제의 목적
컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
- 운영체제는 동시 사용자 / 프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상(illusion)을 제공
• 현대 컴퓨터 시스템은 프로그램 하나만 컴퓨터에서 돌아가는 것이 아니다. Physical Machine은 한 대의 실제의 컴퓨터. Abstract Machine은 실제 컴퓨터가 아니라 사람들의 머리 속에 있는 컴퓨터. 과거의 아주 오래전의 컴퓨터에서는 한 명의 사용자가 한 명의 프로그램만을 물리적인 컴퓨터에서 실행하는 시스템이었다. 현대의 운영체제는 컴퓨터에서 웹서핑 하면서 노래도 들으면서 게임도 할 수 있다. 한 대의 컴퓨터에서 여러 프로그램을 동시에 실행시킬 수 있는 그런 환경을 이야기한다.
• 각각의 사용자 또는 각각의 프로그램 입장에서는 컴퓨터 안에서 다른 프로그램이나 다른 사용자가 같이 사용한다는 것을 몰라도 된다. 즉 사용자는 자기 혼자 physical machine에서 사용되고 있다는 생각으로 실행하면 된다.
• 프로그램들 입장에서는 자기 혼자만 물리적 컴퓨터를 사용하는 것처럼 생각하는데 이 컴퓨터는 실제로 여러 프로그램을 돌린다. 한 대 가지고 여러 개를 마치 각자 독자적인 컴퓨터를 쓰는 것처럼 제공하려면 누군가가 중간 역할을 해주어야 한다. 그 중간 역할이 운영체제!
• 그림은 애매하지만 여러 사용자가 되어도 마찬가지. 여러 사용자가 프로그램을 돌리는 거나, 사용자 1명이 여러 프로그램을 돌리거나 비슷한 의미. 다만 한 대의 컴퓨터에 여러 사람이 앉아서 실행할 수 없어서 여러 사람이 프로그램을 돌린다고 생각. 물리적 컴퓨터를 일종의 서버 개념으로 이해하기.
하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행
컴퓨터 시스템의 자원을 효율적으로 관리
- CPU, 메모리, I/O 장치 등의 효율적 관리
* 주어진 자원으로 최대한의 성능을 내도록 → 효율성
* 특정 사용자 / 프로그램의 지나친 불이익이 발생하지 않도록 → 형평성
- 사용자 및 운영체제 자신의 보호
• 자원 : CPU, 메모리, IO 장치 같이 컴퓨터 안에 존재함
• CPU는 한 개가 있는데 하나의 CPU를 짧은 시간 간격으로 번갈아 이 프로그램, 저 프로그램을 실행함. 이 것이 반복됨으로써 개별 프로그램입장에서는 자기 혼자 CPU를 독식하고 있는 듯한 그런 것을 제공하고 그 역할을 운영체제가 함.
→ 운영체제는 CPU를 현재 실행 중인 프로그램에게 번갈아 주는 역할을 함
• 메모리는 유한함. 여러프로그램을 실행시키면 메모리에 올라가게 되고, 그러면 언젠가는 메모리가 소진됨. 이 한정된 메모리에 프로그램이 여러개 돌아가면 어떤 프로그램에 메모리 용량을 얼만큼 할당할 것인가에 대한 문제가 생김. 메모리는 CPU의 작업 공간. CPU에서 실행되려면 메모리에 반드시 올려 놓아야한다.
• 특정 프로그램에 메모리를 많이 주었더니 전체적인 성능이 좋다. 그렇다고 해서 일부 프로그램을 메모리에서 쫒아내고 cpu에서 안 주면 되겠느냐 그러지 않아야 한다는 것이 형평성 원리.
3. 컴퓨터 시스템의 구조
• I/O : input / output
4. 운영체제의 기능
• 컴퓨터의 전원을 키면 부팅이 일어나는데, 이것은 운영체제가 메모리에 올라가서 실행된다는 것.
◦ 운영체제라고 써져 있는 것은 컴퓨터가 꺼지기 전까지 실행되는 프로그램
◦ 운영체제 중에서도 핵심적인 부분을 커널이라고 한다. 커널은 메모리에 상주한다.
◦ 운영체제를 제외한 나머지 메모리 부분은 프로그램을 실행시키면서 여러 프로그램들이 메모리 공간을 차지하면서 실행됨.
• cpu의 작업공간은 메모리이기 때문에 I/O장치에 직접 접근할 수는 없다.
◦ 만약에 어떤 프로그램이 실행이 되다가 디스크에서 어떤 파일을 읽어와야지 그 프로그램이 실행할 수 있는 상황이 있을 수 있다. 이때 CPU가 직접 디스크에서 파일을 읽지 않고, 이런 I/O 장치들은 이들을 전담하는 일종의 작은 CPU들이 붙어있다. 이것이 I/O 컨트롤러
◦ 그래서 CPU가 디스크에서 뭘 읽어야 한다면 I/O컨트롤러에게 이 프로그램에 필요한 파일을 읽어 달라고 부탁한다. 그러면 컨트롤러가 요청한 파일을 읽어서 본인의 작은 메모리에 읽어 놓고 CPU에 다 했다고 알려주면 CPU가 I/O컨트롤러의 메모리에 올라온 것을 가져다가 일을 계속한다.
• CPU는 짧은 시간 간격으로 여러 프로그램에게 번갈아 할당이 되기 때문에 운영체제의 가장 중요한 역할 중 하나가 CPU 스케쥴링이라는 것이다.
◦ CPU는 하드웨어이기 때문에 생각을 못한다. 가리키고 있는 위치에서 기계어를 하나 읽어서 실행하는 역할만 함.
◦ 그래서 CPU가 어떤 프로그램한테 넘어간다는 얘기는 cpu를 지금 운영체제가 가지고 있으면서 운영체제에 있는 기계어 중에 지금 cpu는 프로그램 c에게 넘깁니다~라는 기계어를 운영체제에 있는 기계어가 cpu에서 실행되면 프로그램 c에게 cpu가 넘어가는 것
◦ 악의적인 경우에는 운영체제가 cpu를 잡고 있으면서, 프로그램c에게 cpu를 주었다. 그런데 프로그램 c가 c언어로 짠 무한루프를 도는 프로그램같은 거여서 종료가 안 됨. 그래서 혼자 cpu를 쓰면서 안 줄 수도 있음. 그래서 운영체제가 cpu를 관리할 때는 이번에는 너한테 써~라고 하면서 cpu를 넘겨주기는 하지만 무한히 쓰라고는 하지 않음. 한정된 시간동안만 쓰게 하고 그 시간이 지나면 cpu의 사용권을 빼앗아오도록 운영체제가 구현하고 있다.
◦ 운영체가 cpu를 가지고 있을때는 어떤 것도 할 수 있지만, 일단 프로그램c한테 cpu를 넘겼으면 운영체제도 뺏을 방법이 없다. 그래서 cpu를 무한정 쓰지 못하게 막기위한 하드웨어적 장치가 같이 있어서 이들과 협조해서 cpu 스케쥴링을 하고 있다.
• cpu에 비해 디스크는 대단히 느린 장치(100만배 정도?). cpu와 메모리도 100배차이가 나는데 이 갭을 메꾸는 뭔가가 필요한데 그런 것이 있다.
◦ 그래서 a라는 프로그램이 파일을 읽어주세요 하고 디스크에 요청을 하면 이 프로그램은 그 파일이 읽힐때까지 멀 할 수가 없다. 그래서 cpu는 보통 다른 프로그램에게 넘어간다.
◦ 여러 프로그램이 cpu를 번갈아가면서 쓰듯이, I/O 장치에도 요청이 여러 프로그램으로부터 번갈아 도착할 수 있다. 그러면 디스크에 읽어달라는 요청이 프로그램 a, b, c..로부터 올 수도 있다. 물론 요청이 먼저 온 순서대로 처리해도 된다. 하지만 먼저 도착한 순서대로 처리하면 비효율적이다. 운영체제는 자원의 효율성을 목적으로 하기 때문에.그래서 나중에 들어오더라도 효율적으로 처리할 수 있다면 먼저 처리해줌 ⇒ 디스크 스케줄링
- 디스크 스케줄링과 똑같은 것이 엘리베이터 스케줄링 100층 건물에서 1층에서 버튼 누르고 100층에서 버튼 누름. 1층에서 2층을 올라가는 도중에 2층 사용자도 버튼을 누름. 그러면 2층에서 늦게 눌렀지만 같은 방향으로 가면 같이 태워서 가면 효율적인 것. 안 그러면 1층 → 100층 → 2층으로 갈 것이다. ⇒ 비효율적
- 디스크 내부에서 엘리베이터처럼 이동할 수 있는 헤드가 존재함.
• 캐싱 : 중간 단계를 두는 것. 메모리와 디스크 사이에도 속도차이가 나서 디스크에서 파일을 읽어달라는 요청이 올때마다 디스크에 접근하는 것이 아니라, 똑같은 데이터를 나중에 또 읽어달라고 하면 굳이 디스크까지 가는 것이 아니라 메모리 어딘가에 보관해놓았다가, 그것을 읽는다.
• 인터럽트 : cpu에서 어떤 프로그램을 실행하다가 프로그램이 i/O요청을 하면, 직접 i/o작업을 실행한는 것이 아니라 i/o장치에 붙어있는 작은 cpu들에게 부탁을 한다고 했는데, 그럼 이후에 cpu는 무엇을 할까? cpu는 속도가 빠르기 때문에 파일을 읽어오는 시간동안 cpu가 놀고 있으면 굉장한 자원 낭비!!!!그렇기 때문에 컨트롤러에게 일을 시키고 나서 당장 일할 수 있는 것을 찾는다.
◦ 그래서 cpu 스케줄링에서 중요한 것 중 하나가 cpu는 놀리면 안 된다!! 일할 수 있으면 일 시키기!
◦ 그런데 cpu가 전에 시킨 일이 다 끝나면 나 다 일 끝났어~하고 cpu에게 전달해야하는데 그것을 인터럽트를 이용해서 전달함. 컨트롤러가 cpu에게 인터럽트를 걸어서 일 끝난 것을 알려줌. 그러면 cpu는 매번 기계어를 실행하고 있지만, 기계어 하나를 실행하고 나면 인터럽트 체크를 한다. 나한테 누가 연락하고 싶은 것이 없는지 확인.
◦ 인터럽트가 들어오면 cpu는 자동적으로 운영체제에게 넘어감. 운영체제는 인터럽트 들어온 이유를 보고 자기가 할 일을 한다.
◦ 인터럽트는 느린 장치에게 일을 시켜놓고 cpu가 일이 끝났는지를 확인하는 것은 비효율적이기 때문에, cpu는 일을 하고 있고, 느린 장치들이 cpu가 시킨 일들이 끝나서 cpu에게 연락을 하는 것.
5. 프로세스의 상태
• 프로세스 : 실행 중인 프로그램
• 초록색 동그라미 : 컴퓨터에서 실행되는 프로세스(프로그램)
• cpu는 한 개밖에 없지만 cpu를 사용하고 싶은 프로그램은 많다. 그래서 기다려야 하는데 그것을 운영체제는 큐를 만들어서 줄세워 놓는다. cpu 스케쥴링을 운영체제가 한다.
• 디스크 입출력 큐는 디스크 스케쥴링에 의해서 처리가 된다. 처리가 끝나면 디스크 컨트롤러가 일 끝났다고 인터럽트를 걸어 cpu에게 알려준다.
• 사람이 키보드를 두드리면 키보드 컨트롤러가 인터럽트를 걸어서 cpu에게 알려준다. 인터럽트가 들어왔으니까 cpu는 운영체제에게 넘어가고 운영체제는 키보드 입력으로 들어온 데이터를 메모리로 카피해서 그 프로그램을 사용할 수 있게 만든다. cpu와 i/o를 반복적하는 작업으로 이루어진게 사람과 인터랙션 하는 프로그램
• i/o작업없이 cpu만 굉장히 오래쓰는 프로그램이있다. 예를 들면 유전자 분석.
📑 출처
http://www.kocw.net/home/cview.do?cid=4b9cd4c7178db077
감사합니다😊
'🎥Etc > [kocw]운영체제' 카테고리의 다른 글
[Ch2]컴퓨터 시스템의 구조4 (0) | 2023.06.23 |
---|---|
[Ch2]컴퓨터시스템의 구조3 (0) | 2023.06.23 |
[Ch2]컴퓨터 시스템의 구조1,2 (0) | 2023.06.23 |
[Ch1]운영체제의 개요2 (0) | 2023.06.23 |
목차 (0) | 2023.06.23 |