CS 공부/운영체제

CS 스터디 - OS 정리 3

Operating System Structure

Multiprogramming

멀티프로그래밍은 효율성을 위해 필요하다.

  • CPU 가 항상 하나 이상의 실행을 하기 위해 jobs(code and data) 들을 Multiprogramming이 organizes한다.
  • 전체 작업의 subset은 항상 메모리에 저장된다.
  • job Scheduling에 의해 작업이 선택된다.
  • 입출력등으로 인해 CPU가 기다려야할 경우에 운영체제는 다른 작업으로 변경되게 된다.

Time sharing

멀티프로그래밍에서 확장된 개념으로, 멀티태스킹이라고 불리기도 한다. CPU가 스케줄링을 통해 작업들을 빠르게 switching 하면서 마치 동시에 프로그램이 구성되는 것처럼 느껴지게 한다.

  • 응답시간은 충분히 짧아야 한다.
  • 각 유저들은 메모리에 적어도 하나의 프로그램을 실행한다. → 프로세스
  • 만약 여러 작업들이 동시에 실행될 준비가 되어있다면 → CPU 스케쥴링
  • 프로세스들이 메모리와 맞지 않다면 swap 하여 바꾼뒤 실행한다.
  • virtual memory는 메모리외에서 프로세스 실행을 돕는다.

 

Operating System operations

인터럽트는 하드웨어를 통해서 이루어지며, 소프트웨어 에러 혹은 리퀘스트는 excepiton이나 trap을 생성한다.

Dual Mode

운영체제가 유저 모드(user mode)와 커널 모드(kernel mode)로 나누어서 동작하는 것을 이야기하며, OS의 데이터에 접근해서 변경하는 것을 막고 시스템의 접근을 막기 위해서 듀얼로 나뉘어 진행한다.

  • 유저모드 : 어플리케이션 실행
  • 커널모드 : OS의 기본적인 부분 실행. 
  • application 이 시스템 하드웨어를 직접 접근하면 보안, 안정성에 문제가 있을 수 있기 때문에 분리한다.

 

Process Management

프로세스 :

실행되고 있는 프로그램. Program은 passive entity(코드 그 자체, 파일 형태로 존재하는 수동적 상태)이지만, Process는 active entity(실행되고 있는 것, 프로그램 카운터를 가지는 능동적 상태) 이다.

  • 프로세스는 CPU, memory, I/O, files, initialization data 등의 리소스가 필요하다.
  • 프로세스 종료는 사용하던 리소스의 reclaim이 필요하다.
  • 싱글 스레드 프로세스 (Single Threaded process) :  하나의 프로그램 카운터가 있어서 순차적으로 하나씩 실행됨. 
  • 멀티 스레드 프로세스 (Multi Threaded process) : 각 스레드별로 프로그램 카운터를 가지고 있다. 

※ 프로그램 카운터(Program Counter)란?

더보기

프로그램 카운터(Program counter, PC)는 마이크로프로세서(CPU) 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다. 때문에 명령어 포인터라고도 한다. 인텔의 x86계열의 CPU에서는 IP(Instruction Pointer)라고 한다.

프로그램 계수기는 각 명령 주기에 따라 자동으로 증가하여, 메모리에 있는 명령어들이 순차적으로 실행될 수 있도록 한다. 단, 분기 또는 서브루틴 호출/복귀 등의 특정 명령어는 프로그램 카운터에 실행해야 위치가 바로 다음 코드가 아니라 새로운 기계어 코드의 위치 값이 들어간다.

대부분의 프로세서에서는 명령어를 반입하고 난 직후에 명령어 포인터를 증가시킨다. 경우에 따라 분기 명령어의 목표가 되는 주소를, 그 분기 명령어의 인수(operand)에서 지정하는 경우도 있다. 명령어의 인수값이 절대 주소값인 경우는 인수값을 프로그램 카운터 값에 설정하면 그 주소를 점프한다. 명령어의 종류에 따라 인수가 현재 위치에서의 상대적으로 지정하는 경우도 있는데 이런 경우 현재 프로그램 카운터 값에 인수값을 더하는 방식을 사용한다. 즉, 다음에 실행될 명령어의 주소는 명령어에 따라 명령어의 인수에 지정되는 경우도 있다.

출처 : 위키백과

 

운영체제의 프로세스 관리 활동에는 다음과 같은 것들이 있다.

  • 유저/시스템 프로세서의 생성 및 삭제
  • 프로세스의 일시중지와 재실행
  • 프로세스 동기화 방법 제공
  • 프로세스 통신 방법 제공
  • 교착상태(Deadlock)에서의 처리 방법 제공

 

Memory Management

모든 명령어와 데이터는 프로그램 실행 시 메모리 상에 있어야 하며, 메모리 관리는 어떤 메모리가 있는지, 그리고 언제 실행되는지에 따라서 결정된다.

  • 어떤 부분의 메모리들이 현재 사용되고 있는지 파악
  • 어떤 프로세스와 데이터들이 메모리에 들어가고 나갈지를 정함
  • 메모리 공간이 필요할 때 어떻게 메모리 공간을 배분하고, 공간을 제거할 지 결정

 

Mass-Stroage Management

대체로 디스크는 메인메모리에 들어가지 않거나, 긴 시간동안 가지고 있어야되는 값을 저장하게 된다.

 

OS의 역할 

  • Free-space management (디스크 자유 공간 관리)
  • Storage allocation (저장공간 할당)
  • Disk scheduling (디스크 스케쥴링)

특정한 몇몇 저장소는 빠르지 않아도 괜찮다.

 

Migration of data from Disk to Register

멀티테스킹 환경에서는 그것이 어디에 저장되어있는지 상관없이 최근의 값을 사용하는 것이 매우 중요하다.

멀티프로세서 환경에서는 캐시의 일관성이 중요하다. 

분산된 환경에서는 데이터의 복사본이 여러개 있을 수 있으므로 더욱 복잡해질 수 있다. 

 

I/O subsystem

OS의 한가지 목적은 하드웨어장치의 특성을 사용자로부터 숨기는 것으로,

 

IO 서브시스템은 다음과 같은 것들에 책임이 있다.

  • 버퍼링(전송되는 동안 데이터를 임시로 저장), 캐싱(데이터의 일부를 성능이  빠른 저장소에 저장), 스풀링(한 작업의 출력과 다른 작업의 입력을 중첩)을 포함한 I/O의 메모리 관리
  • 일반 장치 드라이버의 인터페이스
  • 특정 하드웨어 장치용 드라이버

 

Protection and Security

  • Protection : OS자원에 허용된 접근만 Access (dual mode)
  • Security : 시스템을 내부와 외부로부터 안전하게 만든다.

시스템은 누가 어떤 권한을 가지는지 먼저 구분한다. 

  • 유저 정보(user ID...) 는 이름이나 관련된 번호들을 유저마다 가지고 있으며, 유저아이디는 모든 파일과 관련되어 있어서 access control과 관련되어 있따.
  • 그룹 ID는 유저들의 그룹을 정의하고 각각의프로세스나 파일들에 관련된다.
  • previlege escalation(권한 확대)의 경우 유저에게 추가적인 권한을 주는 것이다. 

 

Operating System Services

사용자에게 유용한 기능을 제공하는 OS 서비스의 집합

 

① User Interface

  • 사용자와 컴퓨터 시스템이 만나는 지점
  • Command-Line Interface (CLI), Graphics User Interface (GUI), Batch
cf> CLI : 사용자가 텍스트 명령을 통해 명령을 내리는 인터페이스

② Program Execution (프로그램 실행)

  • 시스템은 메모리에 프로그램을 로드하고, 그 프로그램을 실행시키고, 강제적이든 그렇지 않든 실행을 끝낼 수 있어야 한다.

③ I/O Operations (입출력 명령)

  • 입출력 명령을 수행
  • 효율과 보안을 위해 운영체제를 거치도록 한다.

④ File-system Manipulation (파일-시스템 조작)

  • Programs need to read and write files and directories, create and delete them, search them, list file information, permission management.

⑤ Communications (통신)

  • 프로세스는 같은 CPU 혹은 한 네트워크 내의 CPU들 간에 정보를 주고받을 수 있다.
  • 통신은 공유 메모리 (shared memory) 혹은 message passing (메시지 패싱) 을 통해 가능
cf> 공유 메모리 (shared memory) : 여러 개의 프로세스가 메모리의 한 부분을 공유하도록 하는 것
cf> 메시지 패싱 (message passing) : 프로세스 간에 정보 패킷(packets)을 주고받는 것

 

⑥ Error Detection (에러 탐지)

  • 운영체제는 가능한 에러들을 지속적으로 탐지해야 한다.
    • CPU, 메모리 하드웨어, I/O 장치, 유저 프로그램 등에 의해서 발생할 수 있으며, 각 타입의 에러에 대해 적절한 대처를 진행해야 함.
    • 디버그 시스템은 시스템을 효과적으로 사용함에 있어 유저와 프로그래머의 능력을 크게 향상시킬 수 있다.

⑦ Resource Allocation (자원 할당)

  • 다수의 사용자 혹은 다수의 job이 동시에 실행될 때, 자원이 공평하게 할당되어야 한다.

⑧ Accounting (회계)

  • 어떤 종류의 컴퓨터 자원이 얼마나, 어떤 사용자에게 쓰이는지 추적

⑨ Protection and Security (보호와 보안)

  • 동시에 실행되는 프로세스들이 서로 방해가 되서는 안 된다.
    • protection: 시스템 리소스에 대한 모든 접근은 통제되어야 한다.
    • security: 외부의 접근은 유저 인증이 필요하며, 외부 입력장치 방어를 위해서 허가받지 않은 접근을 막는다.

System Calls

시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.

System Call Implementation 

일반적으로 각 시스템 콜마다 번호가 주어지며, 이 번호에 따라 인덱싱된 테이블을 가지고 있다.

  • 시스템 콜 인터페이스는 운영체제 커널에서 계획된 시스템 콜을 일으키고 시스템 콜의 상태와 반환값을 돌려준다
  • 시스템 콜을 호출하는 사람은 어떻게 시스템 콜이 시행되는지 알 필요 없다.
    • API를 따르고 운영체제가 호출의 결과로 무엇을 할지만 이해하면 된다.
    • API에 의해 운영체제 인터페이스의 대부분의 디테일은 숨겨진다.

시스템 콜의 종류

  • 프로세스 제어 (e.g. end/abort, load/execute, create/terminate process, get/set process attributes...)
  • 파일 관리 (e.g. create/delete file, open/close, read/write/reposition...)
  • 디바이스 관리 (e.g. request/release device, read/write/reposition...)
  • 정보 유지 (e.g. get/set time/date/process/file/device/atrributes)
  • 커뮤니케이션 (e.g. create/delete communication connection, send/receive messages...)

 

System Programs

 운영체제는 알려진 프로그램의 개발과 실행을 위해 좀 더 편리한 환경을 구축하도록 도움을 주는 시스템 유틸리티(System Utility) 즉, 시스템 프로그램을 제공한다. 다음과 같은 범주로 분류할 수 있다.

  • 파일 관리 : 파일과 디렉터리를 생성(create), 삭제(delete), 복사(copy), 이름변경(rename), 인쇄(print), 덤프(dump), 리스트(list) 등 일반적인 조작
  • 상태 정보 : 시스템의 날짜(date), 사용가능한 메모리(memory)와 디스크의 공간의 양, 사용자 수 와같은 상태 정보를 제공한다.
  • 파일 변경 : 디스크 혹은 다른 저장장치의 파일의 내용을 생성하고 변경하기위해 사용된다. Windows의 메모장(notepad)나 Linux의 vi, emacs 같은 것이 속한다. 통칭 문장 편집기(text editor(라 불린다.
  • 프로그래밍 언어 지원 : 일반적인 프로그래밍 언어들(C, C++, JAVA 등)에 대한 컴파일러(Compilers), 어셈블러(Assemblers), 인터프리터(Interpreters)가 제공된다.
  • 프로그램 적제와 실행 : 프로그램이 실행되기 위해서는 메모리에 적제되어야 한다. 그를 위한 절대 로더(absolute loader), 재배치 가능 로더(relocatable loder), 링키지 에디터(linkage editor)와 중첩 로드(overlay loader) 등을 제공할 수 있다.
  • 통신 : E-mail, remote login, telnet 등을 통해 통신 관련 서비스를 제공한다.
  • 응용프로그램

대체로 OS에 대한 유저들의 view는 실질적인 system call이 아닌, system program에 의해서 정의된다.