운영체제[1.운영체제 개요(2)]

이유정·2023년 5월 22일
0

운영체제

목록 보기
2/42

목표

운영체제의 기능인 CPU 스케줄링, 메모리 관리, 디스크 스케줄링과 운영체제의 종류에 대해 알아본다.

운영체제의 기능


그림설명1) 컴퓨터의 전원을 키면 부팅이 일어난다. => 운영체제가 기본적으로 메모리에 올라가서 실행이 된다는 뜻이다. 컴퓨터가 꺼지기 전까지 운영체제는 항상 실행된다. 운영체제 중에서도 핵심적인 부분인, 커널은 메모리에 상주하면서 컴퓨터가 돌아갈 때 언제나 메모리에 올라가 있는 부분이 되고, 운영체제를 제외한 나머지 메모리 부분은 프로그램을 실행시키면서 여러 프로그램들이 조금씩 메모리를 차지한다. cpu의 작업공간은 메모리라 부르고, 매 클럭마다 이 메모리의 운영체제에 있는 기계어를 읽어다가 cpu가 실행을하면, 운영체제가 cpu를 쓰고 있구나, 메모리 프로그램c 기계어를 읽어다가 cpu가 실행하면, 아 cpu를 프로그램 c가 쓰고 있구나.
cpu가 외부장치에 직접 접근할 수는 없다. 만약에 어떤 프로그램이 실행이 되다가 디스크에서 어떤 파일을 읽어야 프로그램이 실행될 수 있는 상황에서 그럴때 cpu가 디스크에서 직접 파일을 읽어오거나 그렇지 않고, I/O 디바이스들을 이들을 전담하는 작은 CPU들이 붙어있다. : I/O 컨트롤러 => 큰 CPU가 I/O 컨트롤러한테 파일 요청을 하면, 작은 메모리에 올라와 있는 메모리를 큰 메모리에 가져다가 일을 계속하는 것이다.
1. CPU 스케줄링

  • 어떤 프로그램에게 CPU 사용권을 줄 것이냐? 프로그램 정하는 문제
  • 얼마 동안 줄것이냐?
    상식) CPU는 하드웨어기 때문에 생각을 못해. 그냥 매번 가리키고 있는 위치에서 기계어를 읽고 실행한다. CPU를 운영체제가 가지고 있으면서 그 기계어가 명령을 한다. CPU의 실행은 운영체제의 대행을 통해서 이뤄진다.

2. 메모리 관리

  • 한정된 메모리 공간을 여러 프로그램들한테 어떻게 쪼개서 할당할 것인가?

3. 디스크 스케줄링

  • 디스크에 들어온 요청을 어떤 순서로 처리할까?
    기본) 디스크는 CPU보다 100만배나 느리다.
    기본) 자원의 효율성을 추구하기 때문에 디스크도 처리 순서를 요청 들어온 순서대로 처리하지 않는다. 나중에 들어온 요청도 순서를 뒤바꿔서 효율적이면 그렇게 한다. (엘리베이터 스케줄링을 생각해보자.1층 갔다가 100층 갔다가 50층 가진 않는다. 1=> 50=> 100)

4. 인터럽트, 캐싱

  • 빠른 CPU와 느린 I/O 장치간 속도차이를 어떻게 극복할까?
    기본) CPU, 메모리 쪽하고 I/O쪽하고 굉장히 속도가 차이난다. 100만배 정도.
  • 캐싱: 중간 단계를 좀 두는 것이다. CPU와 메모리 사이에서도 중간에 캐시메모리를 둔다. 메모리와 디스크 사이에도 똑같은 데이터를 나중에 또 읽어달라 그러면 메모리 어딘가에 보관해놨다가 디스크까지 안가고 메모리에 저장해둔 복사본을 읽는다. 캐시메모리
  • 인터럽트: 가로채기? CPU가 어떤 프로그램을 실행하다가 하나의 프로그램이 I/O요청을 하게되면 CPU가 직접 I/O 작업을 하는 것이 아니고, I/O 장치에 붙어있는 작은 cpu 컨트롤러한테 부탁을 하게 된다. 부탁을 해놓고 큰 cpu는 노냐? 100만배가 더 빠르기 때문에 놀면 굉장히 자원의 낭비다. 당장 일할 수 있는 것을 찾는다. b라는 프로그램은 지금 cpu만 얻으면 기계어를 실행시킬 수 있으면 b 프로그램 실행하겠지!!a 프로그램이 요청한 파일이 다 읽혀지면 큰 cpu한테 나 다했다고 인터럽트라는 것을 걸어서 알려준다. 큰 cpu는 기계어 하나 실행 끝나면 인터럽트 들어온거 있나 항상 확인한다. 인터럽트가 들어왔으면 cpu는 자동적으로 운영체제한테 넘어가게 된다. 운영체제는 인터럽트 들어온 이유를 보고 자기 할 일을 한다. 다음에 a프로그램이 cpu를 얻도록 한다.

프로세스의 상태

프로세스: 실행중인 프로그램

그림설명) 하나의 cpu는 어떤 프로그램을 실행시키고 있다. 다른 프로그램들은 cpu큐에서 대기타고 있다. 그러다가 디스크에서 파일을 가져와야 하는 프로그램은 디스크 큐로 대기하고 거기에서 일이 끝나면 인터럽트로 cpu한테 알려주고, 운영체제가 스케줄링한다.

그림설명2) 사람이 키보드를 두드리면, 키보드도 마찬가지다. 키보드 컨트롤러가 cpu한테 인터럽트를 걸어서 키보드 입력이 들어왔다고 말한다. cpu가 운영체제한테 넘어가고 운영체제는 키보드 입력으로 들어온 데이터를 메모리로 카피해서 그 프로그램이 사용할 수 있게 한다.

  1. 프로그램 종류
  • interactive application: cpu와 i/o를 번갈아 한다. (예: 게임, 웹서핑 등 )
  • scientific application : i/o 는 안쓰고 cpu만 굉장히 오래쓰는 프로그램들이 있다.(예: 유전자 분석, 행렬곱셈)

CPU 스케줄링

어떤 프로그램에게 CPU 사용권을 줄지 고민하는것
예시1)CPU를 오래 쓰는 프로그램이 먼저 도착했을 때

예시2)CPU를 짧게 쓰는 프로그램이 먼저 도착했을 때

위 두 예시는 어떤걸 가정했는가?

  • PROCESS한테 CPU를 주면 뺏지 않았다. (자발적으로 내놓을 때까지 CPU를 뺏지 않음)

위 방법보다는, 아래 RoundRobin 방법을 현재 많이 씀 . 기본 아이디어
예시3)


어떤 페이지를 쫓아내야 하는가?

디스크 스케줄링

cpu를 쓰고 나서 디스크 파일을 읽어달라거나, 파일에 저장을 해달라거나 하는 요청이 들어오면 그런 process는 디스크에 저장이 된다.

FCFS 디스크 스케줄링

SSTF 디스크 스케줄링

SCAN 디스크 스케줄링

  • 이 방법이 디스크 스케줄링의 근간이 된다. (제일 많이 씀)
  • 누군가 영원히 배제되는 문제는 없다.
  • 헤드의 이동거리가 짧아진다.
  • 엘리베이터 스케줄링이 SCAN 스케줄링의 근간이다.

캐싱

  • 이렇게 계층화 되어있는 이유는 속도차이를 완충하기 위한 것이다.
  • 모든 데이터가 쌓여있는것은 제일 아랫단이고 데이터가 필요하다고 하면 올리고 올리고, 저장을 해야겠다 하면 내리고 내리고 내려서 저장한다.
  • 올리고, 내리는데 왜 시간이 완충이 되느냐? => 캐싱이다.
  • 동일한 데이터를 다시 요청하면 중간에서 재사용하는 것이다. 중간 경로에 저장되어 있으면 밑에까지 안내려와도 되잖아. 빠른 계층에 복사해놓고 다시 요청이 올 때 그 복사본을 줘버리자. 요청한게 다 빠른 장치에 있을 순 없다. 용량이 한정되어 있으니까 쫓아낼 때 미래 재사용 안될거를 밑으로 쫓아낸다. 이것이 가장 캐싱의 중요한 알고리즘이다.

플래시메모리

  • 저장장치로 하드디스크 뿐만 아니라 많이 사용된다(스마트폰, 태블릿, 카메라, usb, 노트북이나 pc 때 빠르고 비싼거 사고 싶을 때 하드디스크 말고 ssd를 사면 된다. (ssd는 안에 플래시 메모리가 들어있는 저장장치다.))
  • 플래시메모리는 반도체 장치다.(디램같은거) 하드디스크는 기계식 장치다.
  • 플래시메모리는 보통 NAND형이다. (저장장치용)

  • 하드디스크는 원판을 돌리려면 전력소모가 크다. 이에비해 반도체장치인 플래시메모리는 전력소모가 적다.
  • 플래시메모리를 모바일장치에 쓰기에 대단히 좋다.
  • 그러나 이후에는 하드디스크 대용인 SSD 형태, 데이터 센터의 큰 서버 환경에서도 플래시 메모리를 쓰는 걸로 점차 확장되고 있다.
  • 플래시 메모리도 약점이 있다. 쓰기 횟수 제약이 있다. 썼다 지웠다를 만번, 십만번 반복하면 더이상 사용을 못한다.
  • 또 다른 약점으로는 데이터가 시간이 흐르면서 변질될 수 있다. 데이터를 0과 1로 구분하는데 전하를 일정수준으로 넣어서 이건 데이터가 1이다. 했는데 셀 안에서 전하가 시간이 흐름에 따라서 빠진다. 1로 읽혀야 하는게 시간이 지나면서 0으로 읽힌다. 그래서 플래시 메모리에 데이터를 저장해놓고 10년후에
  • 이런 하드웨어적인 약점을 소프트웨어가 보완해야한다. 예를들어 빠져나가는 전하량 때문에 일정시간이 지나면 다른 위치에 써준다는지, 예를들어 특정 부분만 쓰는 단점은 골고루 플래시 메모리를 사용할 수 있게끔 한다든가 연구를 한다.

운영체제의 종류


세 군데 공통으로 LINUX를 사용한다.

  • 모든 종류의 컴퓨터에서 다 사용된다.
  • 오픈소스다. 누구나 공짜로 쓸 수 있는 (내용물이 아닌 소스코드를 사용할 수 있다는 뜻)
  • 따라서, 각 환경에 맞게 수정해서 쓸 수 있다.

서버용

  • 서버에서 쓰는 운영체제
  • 대표적으로 LINUX를 사용한다.

PC용

  • LINUX, WINDOWS, MAC 을 사용한다

스마트디바이스용

  • 안드로이드도 아래쪽에는 LINUX 커널이 들어가 있다.
profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글