[전공 CS]/[컴퓨터 구조론][운영체제]

[운영체제] 02 컴퓨터 시스템과 운영체제

우당탕탕 개발 일지 2025. 9. 30. 10:26
728x90

 

 

0. 시험 대비 

커널 모드 , 사용자 모드 두개가 존재하는 이유 : 보호 

1. i/o 보호 → 문제) 프린트 동시에 사용하려고 접근해서 충돌 날때 ⇒ 해결) in/out 특권 명령
2. 메모리 보호 →문제) mmu를 뒤서 cpu와 메모리가 정보를 주고 받을때 잘못된 정보가 오면 ISR로 막아줌.⇒해결) mmu
3. cpu보호 →문제) 타이머 인터럽트를 둬서 무한 루프를 감시하는 경우 ⇒해결) 타이머 인터럽트

 


1. 컴퓨터 시스템과 하드웨어 

 

사용자 모드와 커널 모드

  • 사용자 모드
  • 커널모드

⇒ 모드 비트를 통해서 사용자 모드와 커널 모드를 구분함. (커널 모드 1, 사용자 모드 0)

⇒ 모드를 나누는 기준은  운영체제가 아닌 cpu에 의해 구분됨. 

커널 모드에서만 특권 명령 사용 가능


1) 사용자 모드와 커널 모드는 CPU에 의해 구현되는가, 운영체제에 의해 구현되는가?
모드는 CPU에 의해 구현되고 운영체제가 활용하는 기능

2) 운영체제가 사용자 모드와 커널 모드로 나누어 작동시키는 이유는?
커널 공간(커널 코드와 데이터)에 대한 보안과 보호
사용자 응용프로그램은 사용자 모드에서 아무리 심각한 오류가 발생해도 사용자 프로그램만 종료. 시스템을 중단시키지는 못함

3) 사용자 응용프로그램이 커널 코드를 호출하는 일이 있는가?
사용자 응용프로그램을 직접 커널 코드 호출 불가// 시스템 호출을 통해서만 가능

4) CPU가 커널 모드와 사용자 모드 중 어떤 모드로 많이 실행될까?
-시스템 전체 통계를 보면 커널 모드에서 많이 실행
-키보드에서 읽고 디스플레이 출력, 디스크나 네트워크 작업 등 장치 액세스의 경우가 많으면 커널 모드 시간 비율 높음
-아무 작업도 없을 때 실행되는 시스템 유휴 프로세스가 커널 모드에서 실행되기 때문

 


컴퓨터 시스템 계층 구조의 특징

  •  사용자나 응용 프로그램의 하드웨어에 대한 직접 접근 불허 : 반드시 운영체제를 통해서만 접근 가능 
  • 사용자가 하드웨어에 대해 몰라도 컴퓨터를 사용할 수 있도록 함.
  • CPU 메모리나 입출력 장치에 값을 쓰거나 읽을 때 반드시 주소를 발생시킴.

 

하드웨어 설명

1) cpu 

  •  cpu 사이에 명령들의 호환성이 없음 (cpu는 CISC/ RISC 중 하나로 사용됨. )

2) 메모리 

3) 캐시 메모리 

  •  칩 캐시 : CPU 내부에서 만들어진 캐시, 오늘날 대부분 온칩 캐시 
  •  옵치 캐시 : CPU 외부에 설치되는 캐시.
* 캐시 메모리가 있는 경우 CPU는 캐시 메모리에서만 프로그램 실행

 

4) 버스 

5) 장치들 : 키보드, 프린터, 스캐너 등..

6)¨I/O controllers & control circuit : 입출력 장치들을 제어하기 위한 여러 하드웨어.

ex) DMAC, 인터럽트 제어장치 

 

교수님 : DMA 알아두세요! 
DMA :CPU를 거치지 않고 주변 장치와 메인 메모리 간에 데이터를 직접 전송하는 기능
(DMA의 반대는 program i/o라고 할 수 있음.) 

 

 

  • 주소버스: cpu에 32개의 주소선 => 2^32 byte =4GB
  • 데이터 버스 : cpu에 입출력되는 32개의 데이터 선 있음. => 한번에 32bit 읽고 쓰기 가능.(32bit는  4개의 주소 )

 

프로그램이 실행되기 위해 운영체제에 의해 할당되는 공간 4가지  (반드시 알아두세요!)

  • 코드 공간 : 프로그램 코드 적재
  • 데이터 공간 : 전역 변수들이 적재되는 공간
  • 힙 공간: 프로그램에서 동적 할당 받는 공간 
  • 스택 공간 : 함수가 호출될 때 매개변수, 지역변수 등 저장. 

-스택: 메모리의 일부를 사용함. 각 프로그램안에 별도의 스택 공간을 할당 함.

 


 

컨텍스트 (context) : 실행에 필요한 모든 정보

컨텍스트 스위칭 : 한 프로그램의 실행 상태를 잠시 '저장'하고, 다른 프로그램의 저장된 상태를 불러와서 실행하는 과정. 

  • 현재 실행 중인 프로그램의 레지스터 값(=컨텍스트)을 메모리에 저장.
  • 다음으로 실행할 프로그램의 이전에 저장된 레지스터 값(=컨텍스트)을  CPU로 불러옴. 

 

 

 


cpu명령

:cpu가 해석하고 실행할 수 있는 기계 명령 

 

특징)

cpu 사이에 명령들의 호환성 없음. 

( c프로그램을 어떤 cpu를 대상으로 컴파일 하였는지에 따라 기계어가 달라지므로. 컴파일된 코드는 cpu 사이에 호환성 없음)

 


2. 컴퓨터 시스템과 운영 체제 

컴퓨터 시스템은 계층 구조로 설계됨.  (계층간 독립성 확보)

 

계층간 독립성이 확보되면 

-운영체제나 하드웨어를 몰라도 응용 프로그램 사용가능.

-컴퓨터 하드웨어의 타입이나 구조, 제어 방법을 몰라도 개발 가능. 

-하드웨어가 변해도 응용프로그램을 다시 작성할 필요 없음. 

 

컴퓨터의 시스템 계층

 

 

 

운영 체제가 없다면

  • 직접 하드웨어를 사용자가 제어 해야함. (계층간 독립성 유지 X)
  • 응용 프로그램에 대한 스케줄링은 누가 할것 인가를 정하는 것. ⇒ 프로세스 관리 (R-R)
  • 사용중인 프로그램, 사용하지 않은 메모리로 나누어서 관리 , 사용이 끝나면 회수 ⇒메모리 관리
  • 동시에 프린트 할때 ⇒ 장치 관리
  • 데이터를 파일에 기록하려고 할떄 ⇒ 파일 시스템 관리
  • 키보드에서 클릭이 발생하면 프로그램에 어떻게 전달할지 ⇒입출력 관리

 

필요성:

자원에 대한 충돌 해결, 성능 최적화, 사용자의 시스템 사용 효율화

 

 

-시스템 콜 (system call ): 운영체제가 응용프로그램을 대신해 하드웨어를 조작하는 것.

-프로세스 기준:메모리에 적재된 프로그램을 프로세스라도 함.

-스레드(thread): 프로세스의 작은 단위.

 

 

 

운영 체제의 구성요소와 커널

 


운영체제

=커널+ 셀

=커널 +툴+디바이스 드라이브 

 

 

mmu: 메모리 관리 유닛.(cpu와 메모리 중간에 두는 것.메모리에 접근 못하게 하는 것. )

→cpu,memory,mmu: 컴퓨터 자원을 직접 제어하고 관리하는 코드와 자료구조 

 

 

tool

ex) 윈도우의 경우 : 바탕화면 ,작업관리자, 제어판...

 

디바이스 드라이브 

: 장치를 직접 제어하고 입출력하는 소프트웨어

  • 제작사에서 만드는 장치마다 전담 디바이스 드라이버가 있음. 


커널

= 운영체제 (의 핵심 부분)

= 부팅후 메모리에 상주하는 코드와 데이터 

★커널모드를 사용하려면 반드시 system call이 있어야 함. 

  • 커널 모드 = 커널 스페이스: 접근할 수 없음.
  • 커널 코드= 함수들의 집합.
  • 커널 인터페이스 2개 : 시스템 호출, 인터럽트 (사용자 모드 -> 커널 모드로 전환할때 )

 


1. 커널은 스스로 실행되는 프로세스인가? NO
커널은 함수들의 단순 집합, 시스템 호출을 통해 호출되는 함수들
-커널이 스케줄링한다(x)
-커널 프로세스가 실행되면서 주기적으로 스케줄링한다(x)
-시스템 호출과 인터럽트 서비스 루틴에 의해 커널 내 스케줄러 함수가 호출되어 실행(0)

2.커널은 실행 중이다? NO
-커널은 프로세스도 스레드도 아니므로 NO
-응용프로그램이 시스템 호출을 하여 커널 코드를 실행하고 있다(0)
-인터럽트가 발생하여 인터럽트 서비스 루틴이 실행되고 있다(0)

3. 커널은 스택이나 힙을 가지는가? NO
-커널은 스택이나 힙을 가지는 주체가 아니다. 
-스택이나 힙을 가지는 주체는 프로세스나 스레드
-스레드마다 사용자 스택과 커널 스택 소유 //스레드가 생성될 때 프로세스의 사용자 공간에 사용자 스택 할당

 

 


 

운영체제 커널 인터페이스 

커널이 제공하는 2개 인터페이스 : 시스템 호출인터럽트

 

시스템 호출

  • 커널과 응용 프로그램 사이의 인터페이스
  • 응용 프로그램에서 커널 기능을 사용할 수 있는 유일한 방법.
  • 시스템 호출 라이브러리는 운영체제 패키지에 포함됨. 

인터럽트

  • 커널과 하드웨어 장치 사이의 인터페이스 
  • cpu가 하던일을 중단하고 ISR실행

 

표준 라이브러리 (std)

  • 운영체제 커널과 무관한 작업
  • 함수 호출로 사용됨.


라이브러리 = 표준 라이브러리 + 시스템 호출 라이브러리 

 


3. 커널과 시스템 호출 

 

오늘날 운영체제 = 다중 프로그래밍

 

자원 접근 문제

→ 해결 방안 ) 응용프로그램의 자원 접근 불허 (자원에 대한 모든 접근은 커널에만 부여.)

 

 

구체적인 해결방안

  1. 메모리 공간= 사용자 공간+ 커널 공간.
  2. cpu의 실행 모드=사용자 모드+ 커널 모드.
  3. 응용 프로그램이 커널 기능을 이용하고자 할때, 시스템 호출을 이용해서만 커널 코드 이용. 

 

접근을 막은 이유)

  • 악용하는 것을 방지하기 위해.
  • 코딩 실수로부터 지키기 위함. = 커널 코드와 데이터를 지키기 위해

 

 

사용자 공간, 주소 공간, 가상주소 공간 

 

사용자 공간 크기 =프로그램 코드 + 데이터(전역변수) + 힙(동적할당) + 스택

주소 공간 = 사용자 공간 + 커널 공간 

가상 주소 공간 : 사용자나 응용프로그램 관전멩서 보는 주소 범위.  (사용자는 전체 메모리를 사용한다는 착각 발생)

 

 

매핑 테이블 ★

=사용자 공간과 RAM의 공간(=물리공간)을 매핑한다.

=가상 주소(Virtual Address) → 물리 주소(Physical Address) 로 변환

 

 

사용자 공간의 충돌 해결 방법) 가상 주소 공간을 물리 메모리에 매핑.

물리 메모리가 작을 경우 해결방법 ) OS가  물리 메모리를 하드 디스크에 저장함 

 

 

특권 명령
특권 명령 : cpu제어 명령

  • I/O 명령 : 하드웨어 제어 및 장치로부터의 입출력.
  • Halt 명령 : cpu 작동 중지 명령.
  • 인터럽트 플래그를 켜고 끄는 명령: cli, sti
  • 타이머 설정
  • 컨텍스트 스위칭 명령
  • 메모리 지우기 
★ 중요★

1) 사용자 모드에서 커널 모드로 전환시키는 명령 (x)
왜냐하면 시스템 호출을 위해 모든 응용 프로그램에게 허용되어야 하는 명령이기 때문이다.

2) 시계 읽기 (x)
모든 응용프로그램에서 시계를 읽을 수 있어야 하기 때문이다.

3) 가상 메모리에서 메모리 지우기 (x)
프로그램이 자신의 메모리 부분을 지우는 것은 다른 프로세스의 영역을 침범하지 않기 때문이다.

4) 인터럽트 끄기 (o)
인터럽트를 끄는 행위는 CPU 내부의 인터럽트 플래그(IF)를 끄는 행동으로, 인터럽트가 꺼지면 외부에서 인터럽트가 발생해도 CPU는 인터럽트의 발생을 체크하지 않는다. 한 프로그램이 인터럽트를 끄면 CPU는 인터럽트가 꺼진 상태로 계속 있게 되어, CPU가 다른 프로그램을 실행하더라도 인터럽트를 받을 수 없게 된다. CPU는 한 프로그램에게 독점될 수 없기 때문에 이 명령은 특권 명령으로 응용프로그램이 실행할 수 없다.

 

 

시스템 호출 라이브러리 와 응용프로그램.

시스템 호출 핸들러 ( 커널 안에 있음. )

cpu모드 → 커널 모드로 변경, 커널 공간 내 미리 정해진 주소에 있는 시스템 호출 핸들러를 실행함.

 


printf()가 직접 디스플레이에 출력할까?

 

printf()은 디스플레이에 직접 접근 일어나진 않음.

시스템 호출 함수: write()를 사용함.


fread()와 read() 실행 비교 예시

실행 시간: fread < read

  • fread()는 입력 버퍼가 있어서 시스템 호출을 딱 한번만 함. (훨씬 빠르다. )
  • read()를 사용하면 버퍼가 없어서 반복문의 수만큼 10번 시스템 호출됨.

 

 

 

 

운영 체제의 목적 : 성능향상 (시스템 호출이 한번 호출할때 비용이 많기 때문에 횟수를 줄여서 성능을 형상시킴.)


4. 운영체제와 인터럽트

 

인터럽트 발생 처리과정.

 

 

 

 


인터럽트 서비스 루틴  

  • 입출력이 완료될때 장치로부터 입출력 완료 통보를 받는 방법 필요한데 그것이 ‘인터럽트’임.
  • 인터럽트가 없다면 다중 프로그래망 운영 체제의 구현이 불가능함.

 


5. 연습문제 

 

 

1번  컴퓨터 시스템에서 주소를 발생시킬 수 있는 하드웨어 : (1) cpu

2번 주소선이 24개 있다면 cpu가 액세스 할 수 있는 메모리의 최대 크기는? (2^24 = 16MB)(2)

3번 캐시 메모리 (1)

4번 

PC레지스터 : 다음에 실행할 명령어의 메모리 주소.

IR레지스터: 현재 실행 중인 명령어 자체

SP레지스터 : 현재에서 스택의 꼭대기 주소.

 

5번  현재 실행중인 프로그램에 관한 일체 상황 정보 (4)컨텍스트 

6번  컨텍스트 스위칭 (1) 현재 실행중인 프로그램을 중단 시키고 CPU 에세 다른 프로그램을 실행 시키는 행위

7번  운영체제가 지원하는 서비스르르 응용 프로그램이 활용할 수 있도록 해주는 소프트웨어 인터페이스 (1) 시스템 호출

8번 (3)

9번 (4)

10번 (1)

11(1)

12(4)

13 (1) 중요

14 (3)

15 (3)

16 (4)

17 (2)

18 (3)

19 (1)

20 (3)

21 (1)

22 (3)

23 (4)

24 (4)