나의 브을로오그으

#5. 운영체제 서비스 본문

Computer Science/운영체제

#5. 운영체제 서비스

__jhp_+ 2022. 6. 28. 08:53

CPU 보호

- 한 사용자가 실수 또는 고의로 CPU 시간 독점

  * 예: while (n = 1) ... : 무한루프

  * 다른 사용자의 프로그램 실행 불가

(이렇게 코드가 동작하면 무한루프를 돌기 때문에 하나의 프로세스가 CPU를 독점함)

- 해결법

  * Timer를 두어 일정 시간 경과 시 타이머 인터럽트

  * 인터럽트 > 운영체제 > 다른 프로그램으로 강제 전환

(타이머를 설정해서 (가령 100ms) 이 시간을 초과하면 인터럽트를 발생시키고, CPU는 곧바로 ISR(Interrupt Service Routine)을 실행하고, 현재 유저 프로세스를 종료하고, 다음 유저 프로그램을 실행 할 수 있도록 함.)

 

정리

다중 프로그램 시스템 혹은 다중 유저 시스템에서 3가지 보호, 입출력장치 보호, 메모리 보호, CPU 보호를 어떻게 받는지에 대해 알아보았다. 입출력 장치 명령을 특권 명령으로 설정하여 보호하고, 메모리는 MMU의 base, limit 레지스터값을 설정하는 것으로 보호하고, CPU는 타이머를 두어 보호한다. 만약 침범이 이루어질 것 같으면 곧바로 CPU 프로세서에 인터럽트를 발생시켜 OS 내부 Interrupt Service Routine을 실행시킨다.

 

[운영체제의 각 구성별 관리]

프로세스 관리

- Process Management

  * 메모리에서 실행 중인 프로그램 (program in execution)

- 주요기능

  * 프로세스의 생성, 소멸 (creation, deletion)

  * 프로세스 활동 일시 중지, 활동 재개 (suspend, resume)

  * 프로세스간 통신 (interprocess communication : IPC)

  * 프로세스간 동기화 (syschronization)

  * 교착상태 처리 (deadlock handling)

 

메모리 관리

- Main Memory Management

- 주요기능

  * 프로세스에게 메모리 공간 할당 (allocation)

  * 메모리의 어느 부분이 어느 프로세스에게 할당되었는가 추적 및 감시

  * 프로세스 종료 시 메모리 회수 (deallocation)

  * 메모리의 효과적 사용

  * 가상 메모리 : 물리적 실제 메모리보다 큰 용량 갖도록

 

파일 관리

- File Management

- Track/Sector로 구성된 디스크를 파일이라는 논리적 관점으로 보게

(하드디스크는 물리적으로 트랙과 섹터로 이루어져 있으며 이를 헤드로 각 섹터의 부분을 +/-로 자화시켜 읽는 기기이다, 우리는 이 하드디스크에 저장된 정보의 단위로 track/sector라는 물리적 단위가 아닌 File이라는 논리적인 단위로 사용한다. 이유? 쉽게 사용하려고)

- 주요기능

  * 파일의 생성과 삭제 (file creation & deletion)

  * 디렉토리(directory)의 생성과 삭제 (또는 폴더 folder)

  * 기본동작지원 : open, close, read, write, create, delete

  * Track/Sector - file 간의 매핑(mapping)

  * 백업(backup)

 

보조기억장치 관리

- Secondary Storage Management

  * 하드 디스크, 플래시 메모리 등

- 주요 기능

  * 빈 공간 관리 (free space management)

  * 저장공간 할당 (storage allocation)

  * 디스크 스케줄링 (disk scheduling)

(섹터들을 몇개씩 모아서 이를 Block이라고 한다. 하드디스크 포멧을 하고 나면,

저장된 정보들이 전부 지워져서 Block들이 전부 비워져 있는데, 사용하다 보면은 비어있는 Block과

사용중인 Block이 있을텐데 보조기억장치 관리부에서 이를 구분하고, 빈 부분을 어떻게 할당할지, 하드 디스크를 읽는 헤드가 최소한의 움직임으로 원하는 Track/Sector를 읽을 수 있을까를 결정하는 등 일을 한다.)

 

입출력장치 관리

- I/O Device Management

- 주요 기능

  * 장치 드라이브 (Device Driver)

  * 입출력 장치의 성능향상 : buffering, caching, spooling

 

- System Calls

  * 운영체제 서비스를 받기 위한 호출

- 주요 시스팀 콜

  * Process : end, abort, load, execute, create, terminate, get/set attributes, wait, event, signal

  * Memory : allocate, free

  * File : create, delete, open, close, read, write, get/set attributes

  * Device : request, release, read, write, get/set attributes, attach/detache devices

  * Information : get/set time, get/set system data

  * Communication : socket, send, receive

(예를 들어 Linux에서 ABC라는 파일을 만드려면

1. assembly로 작성한 코드 ex_sys_call.asm파일을 작성한다.

eax   8

ecx   0 (파일 속성 0이면 속성지정 않함.)

ebx  ABC (파일 이름)

int    80h

2. main.c c 소스파일 안에서는 create()라는 시스템 콜을 main()문 안에서 호출한다.

3. assembly 소스코드인 ex_sys_call.asm을 어셈블 하면은 ex_sys_call.o 라는 object파일이 생성된다.

4. 이를 c소스파일과 함께 링크를 하면 실행파일이 생성된다.

5. 그리고 실행파일을 실행하면 ABC라는 파일이 생성되었다.!!!

우리는 하드디스크에 몇번째 Track에 몇번째 Sector에 정보를 저장해야 파일이 생성될까 등 이러한 고민 할 것 없이 정해진 약속대로 eax에 8을 넣고, ecx에 파일 속성을 넣고, ebs에 파일 이름을 넣고 software interrupt 80h 만 걸어주면 OS가 파일 생성을 해준다(OS의 서비스를 받을 수 있다.) 즉, 우리는 이러한 방식으로 system call을 할 수 있다.)

참고로 이러한 어셈블리를 어셈블한 object파일들을 라이브러리 형태로 제공하는데, 이를 System Call Lib라고 한다.)

 

정리 :우리가 알아야 할 사실은 유저 애플리케이션에서 OS의 서비스를 사용하기 위해서는 System Call을 요청해야 하며, System Call은 일반적으로 특정 레지스터에 특정 값을 주고 소프트웨어 인터럽트를 걸면 해당 서비스 루틴이 동작한다. 그래서 애플리케이션에서 OS 서비스를 받을 수 있다.