이론공부/시험공부

운영체제 (OS) - Chapter 02

chobyeonggyu03 2024. 10. 11. 19:07
반응형

● Chapter 02의 목표

- OS가 사용자, 프로세스, 다른 시스템들에 제공하는 서비스에 대해 설명
- OS를 구성하는 다양한 방법들에 대해 설명
- 어떻게 OS가 설치되고 커스텀화되며, 부팅되는지 설명
 
 
 
 
 
 
 
 

● Operating System Services

- OS는 사용자들과 프로그램들에 대한 서비스와 프로그램을 실행할 수 있게하는 환경들을 제공해줌
- OS 서비스들중의 한 세트는 유저를 도와주는 기능들을 제공함
- User Interface (UI): 대부분의 OS는 User Interface를 가짐
   ---> Command-Line-Interface (CLI), Graphics User Interface (GUI), Batch 등이 대표적
- Program execution: 시스템은 반드시 하나의 프로그램을 메모리에 적재하고, 해당 프로그램을 실행해야함 
- I/O Operations: 운영 프로그램은 파일이나 I/O device를 포함하는 I/O request가 필요함
 
 
 
 
 
 
 
 
 
 
 

● Operating System Services

- File-System Manipulation : 파일 시스템은 사용자에게 매우 중요하며, 프로그램은 파일 및 디렉터리를 읽고 쓰기, 생성 및 삭제, 검색, 파일 정보 나열, 권한 관리 등의 작업을 필요로 함.
- Communications : 프로세스들은 같은 네트워크나 같은 컴퓨터 내부를 통해 다른 컴퓨터와 정보를 교환하며, 이러한 통신은 공유 메모리나 메세지 패싱(패킷 전송)을 통해 이루어짐
- Error detection : OS는 CPU, Memory Hardware, I/O device, 사용자 프로그램에서 발생하는 오류들을 감지할 필요가 있으며, 에러의 각 타입에 따라 OS는 적절한 조치를 취해야 함, 디버킹 도구는 사용자와 프로그래머가 시스템을 효율적으로 사용할 수 있도록 크게 향상시킴
 
 
 
 
 
 
 
 
 
 

● Operating System Services

- Resource allocation : 많은 유저들이 동시에 작업을 할 때 resource는 반드시 각각에게 제대로 할당되어야 함
- Accounting : 어떤 유저가 얼마나 많은 자원을 사용할 것인지 추적하여 자원을 관리함
- Protection and Security : 많은 사용자나 네트워크 시스템에서 정보의 소유자는 해당 정보의 사용을 제어하고, 동시에 실행되는 프로세스가 서로 방해하지 않도록 독립되어 시스템 자원 접근을 제어함
 
Protection: 시스템 자원에 대한 접근은 컨트롤되어야 함
Security: 외부 사용에 대한 사용자 인증절차를 필요하여 외부 입출력 장치에 대한 접근을 막아야 함
 
 
 
 
 
 
 
 
 
 

● Operating System Services

- OS가 제공하는 서비스는 최종적으로 사용자나 다른 시스템 프로그램에 사용됨
User / Other system programming --> UI (Gui,Cli,Batch중 1개) --> System Calls --> service --> OS --> hardware 의 과정을 거쳐 OS 서비스가 제공됨
 
 
 
 
 
 
 
 
 
 
 

● User Operating System Interface - CLI

- CLI는 'Command Line Interface'의 약자로, 키보드를 통해 명령어를 직접 입력하는 방식의 User Interface이다
 
- 때로 시스템 프로그램에 의해 구현되거나 커널에 의해 구현함
- CLI는 다양한 형태로 구현될 수 있으며, 이를 'Shell' 이라고 함 
- 주로 사용자로부터 명령어를 받아와 이것을 실행함
- 일부 명령어는 쉘에 내장되어 있고, 일부는 단순히 외부 프로그램의 이름만 있음
- 후자의 경우, 새로운 기능을 추가하기 위해 Shell을 수정할 필요없음
 
 
 
 
 
 
 
 
 

 

● User Operating System Interface - GUI

- GUI는 'Graphics User Interface'의 약자로, 마우스, 키보드, 모니터를 활용해 Command를 사용하지 않고 그래픽을 사용하는 방식으 User Interface이다.
 
- 아이콘은 파일, 프로그램, 작업 등을 나타냄
- GUI에서 마우스 버튼을 사용하여 인터페이스의 객체 위에서 다양한 작업을 수행할 수 있음
  ex) 정보 제공, 옵션 선택, 기능 실행, 폴더 열기 등
- 많은 시스템들이 CLI와 GUI 인터페이스를 둘다 사용하고 있
 
 
 
 
 
 
 
 
 
 

● System Calls

- OS에 의해 제공되는 서비스에 대한 프로그래밍 인터페이스임
- 보통 C나 C++같은 고급언어로 작성됨
- 대부분 직접적인 System Call의 호출보다 High-level의 API를 통해 프로그램에 접근함
- 3개의 대표적인 API는 Window의 Win32 API, POSIX의 POSIX API, JVM의 Java API등이 존재함
 
 
 
 
 
 
 
 
 
 
 
 

● System Call의 동작 예제

- 소스파일 --> 원본 파일의 이름을 input으로 주기 --> ouput 파일의 이름도 같이주기 --> 파일 열기 --> ouput 파일 생성 --> 원본 파일을 읽기 --> output 파일에 작성하기 --> ouput 파일 닫기 --> 종료후 리턴 --> 최종파일 등의 과정을 거져 파일을 변환

 
 
 
 
 
 
 
 
 
 
 
 

● Standard API의 예제

- 교재에선 read() 함수를  예시로 제시
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

● System Call Implementation

- 보통 시스템 콜은 각각 고유번호들이 메겨져 있음
- 시스템 콜 인터페이스는 고유번호오 작성된 테이블을 유지함
- 시스템 콜 인터페이스는 OS 커널이 의도한 시스템 콜을 실행하고, 시스템 콜의 상태와 반환 값을 반환함
- 호출자는 시스템 콜이 어떻게 구현되는지 알 필요가 없음, 단지 API를 따르고 OS가 시스템 호출 결과로 무엇을 할지만 이해하면 됨
-  운영체제 인터페이스의 대부분의 세부 사항은 프로그래머들에 의해 숨겨져 있으며, 컴파일러에 포함된 런타임 지원 라이브러리(라이브러리에 구축된 함수 세트)에 의해 관리됨
 
 
 
 
 
 
 
 
 
 
 
 
 

● API, System Call, Os의 관계성

1) 사용자가 API를 호출 (open) 
2) 해당 API와 연관된 System Call을 테이블의 고유번호를 통해 찾음
3) kernel영역에서 해당 시스템 콜을 실행 
4) 결과는 System Call을 거쳐 다시 APi로 전달 후, User applicaiton에 전달 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● System Call Parameter Passing

- 시스템 콜을 식별하기 위해서는 매개변수가 필요하며, 필요한 정보의 유형과 양은 OS에 따라 다름
- 가장 간단한 파라미터 전달방법은 레지스터에 직접 전달하는 것임
- 매개변수가 레지스터보다 많을 경우 다른 방법이 필요함
- 매개변수를 메모리 내의 블록이나 테이블에 저장하고, 그 블록의 주소를 레지스터를 통해 전달하는 방법이 있음,
  ex) Linux, Solaris
- 매개변수를 스택에 PUSH하고 운영 체제가 이를 POP하여 사용하는 방법이 있음, 이 방법은 전달하는 매개변수의 수나 길이에 제한이 없음
 
 
 
 
 
 
 
 
 
 
 

● Table을 통한 Parameter Passing

 
1)  User program이 System Call을 호출
2) x라는 파라미터의 시작 주소를 register에 넘겨줌 
3) 테이블에서 해당 시스템 콜의 고유번호를 찾음
4) Kernel 내에서해당고유번호를 가진 시스템 콜을 실행
 
 
 
 
 
 
 
 
 
 
 
 
 

● System Call의 종류들

[Process control]
- 프로세스 생성 (fork) 및 종료 (exit)
- 프로세스 중단
- 프로세스 로드 및 실행
 
- 프로세스 속성 조회 및 설정
- 시간 대기
- 이벤트 대기 및 신호 발생
- 메모리 할당 및 해제
- 에러 시 메모리 덤프
- 버그 확인, 단일 단계 실행
- 프로세스간 공유 데이터 관리를 위한 Locks 사용
 
 
 
 
 
 
 
 
 
 
 

 

● System Call의 종류들

[File management]
 
- 파일 생성 및 삭제
- 파일 열기 및 닫기
- 파일 읽기, 작성, 위치 재배치
- 파일 속성 적용 및 불러오기
 
[Device management]
 
- device 요청 및 릴리즈
- device 정보 읽기, 쓰기, 위치 재배치
- device 속성 적용 및 물러오기
- device 연결 및 분리하기
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● System Call의 종류들

[Information maintenance]
 
- 시간이나 날짜 지정 및 가져오기
- 시스템 날짜 지정 및 가져오기
- 프로세스, 파일, 장치 속성 지정 및 가져오기
 
[Communications]
- 통신연결 생성 및 삭제
- 메시지 전달 모델로 호스트로한테 메시지를 전송 및 받기
- 클라이언트에서 서버로 메시지 전송
- 공유 메모리 영역을 생성하고 접근 권한을 얻기
- status 정보를 전달
- 원격 장치를 연결 및 분리하기
 
 
 
 
 
 
 
 
 
 
 
 
 

● System Call의 종류들

[Protection]
 
- resource에 대한 접근 통제
- 권한 세팅 및 가져오기
- 사용자 접근 승인 및 거부
 
 
 
 
 
 
 
 
 
 
 

● Unix System Calls 예제

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Standard C Library 예제

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● MS-DOS 예제

- Single Task --> 한번에 하나밖에 실행하지 못함
- 시스템 부팅 시 자동으로 Shell이 호출됨
- 프로그램을 실행할 때 새로운 프로세스를 생성하지 않음
- 단일 메모리 공간을 사용함
- 프로그램이 메모리에 로드될 때 커널을 제외한 모든 부분을 덮어씀
- 프로그램이 종료되면 쉘이 다시 로드되어 사용자 입력을 기다림
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● FreeBSD 예제

- 유닉스 기반의 운영 체제로, 유닉스의 기능과 구조를 따르고 있음
- 멀티태스킹을 지원함 --> 동시에 여러 프로세스를 실행할 수 있음
- 사용자가 로그인하면 선택한 쉘을 호출함.
- Shell은 사용자의 명령을 처리하는 인터페이스 역할을 함
 
- 쉘은 fork() 시스템 호출을 사용하여 새로운 프로세스를 생성함.
- 새 프로세스에서는 exec() 시스템 호출을 통해 사용자가 지정한 프로그램을 로드하고 실행함
- 쉘은 실행 중인 프로세스가 종료될 때까지 대기하며, 프로세스가 종료되면 사용자와의 상호작용함
- 프로세스는 종료 코드를 반환하여 실행 성공 또는 오류를 나타냄
- code = 0은 오류 없이 프로세스가 성공적으로 실행되었음을 의미함
- code > 0은 오류가 발생했음을 나타내는 오류 코드를 의미함
 
 
 
 
 
 
 
 
 
 
 

● System Programs

- 시스템 프로그램 개발과 실행에 편리한 환경을 제시함
- 파일 조작
- status 정보를 파일 수정본에 저장
- 여러 프로그래밍언어들을 지원
- 프로그램 로딩과 실행
- 통신 지원
- 배경 서비스 지원
- 애플리케이션 프로그램 지원
- 대부분의 사용자들의 OS관점은 시스템 프로그램에 의
해 정의되어 있음, 실제 시스템 콜이 아니라
 
 
 
 
 
 
 
 
 
 
 

● System Programs

- 시스템 프로그램 개발과 실행에 편리한 환경을 제시함
- 그것들중 몇몇은 시스템 콜에 대한 간단한 UI임, 다른것들은 더 복잡함
- 파일 관리: 파일 생성, 삭제, 복사, 이름변경, 출력, 덤프, 리스트등의 일반적인 파일과 디렉토리 조작
- Status 정보: 몇몇은 시스템에 정보를 물어봄 - 데이터, 시간, 사용가능한 메모리 공간, 디스크 공간, 사용자의 수 등등, 다른 사람들은 디테일한 성능, 로깅, 디버깅 정보들을 물어봄
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● System Programs

- 파일 수정 : 파일 생성과 수정을 위한 텍스트 편집기가 있으며, 파일의 내용을 검색하거나 텍스를 변경시킬 특별한 명령어가 있음
- 프로그래밍 언어를 지원 : 컴파일러, 어셈블러, 디버거, 인터프리터 등 프로그래밍 언어를 지원하는 도구가 제공됨 
- 프로그램 로딩 및 실행 : 절대 로더, 재배치 가능 로더, 링케이지 편집기, 오버레이 로더와 같은 다양한 로딩 시스템을 사용하여 프로그램을 메모리에 로드하고 실행함
- 통신 : 가상 연결을 만들어 프로세스, 사용자, 컴퓨터 시스템 간의 통신을 가능하게 하며, 사용자가 서로 메시지를 보내거나 웹 페이지를 검색하고, 이메일을 보내고, 원격으로 로그인하고, 파일을 전송하는 등의 작업을 수행할 수 있게 지원해줌
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● System Programs

- 백그라운드 서비스 : 시스템 부팅 시에 자동으로 시작되는 서비스들로, 일부는 시스템 시작에 필요한 후 종료되고, 다른 일부는 시스템이 종료될 때까지 계속 실행됨,
-디스크 검사, 프로세스 스케줄링, 오류 로깅, 출력과 같은 다양한 기능을 제공함
- 사용자 컨텍스트에서 실행되며, 커널 컨텍스트가 아님
- 서비스, 서브시스템 또는 데몬으로 알려져 있음
 
- 응용 프로그램 : 시스템 자체와는 관련이 없는 사용자가 직접 실행하는 프로그램임
 
- 일반적으로 운영 시스템의 일부로 간주되지 않음
- 명령 줄, 마우스 클릭, 터치 입력 등을 통해 실행됨
 
 
 
 
 
 
 
 
 
 
 
 

● Operating System Design and implementation

- OS의 설계와 구현은 정해진 해결책이 없지만, 몇몇 성공적인 접근 방식이 있음
- 다양한 운영 체제의 내부 구조는 크게 다를 수 있으며, 이는 해당 시스템의 특성과 요구에 따라 결정됨
- OS를 설계할 때는 목표와 사양을 정의하는 것부터 시작함
- OS의 설계는 선택된 하드웨어 및 시스템 유형에 따라 영향을 받음
- OS는 사용하기 편리하고 배우기 쉬우며, 신뢰성 있고 안전하며 빠르게 작동해야 함
- OS는 설계, 구현 및 유지 관리가 쉬우며, 유연하고 신뢰성 있고, 오류가 없으며 효율적이어야 함
 
 
 
 
 
 
 
 
 
 
 
 
 

● Operating System Design and implementation

- 정책과 매커니즘의 분리는 중요함
 
- 정책(Policy): "무엇을 할 것인가?"
- 메커니즘(Mechanism): "어떻게 할 것인가?"
- 정책과 메커니즘을 분리함으로써, 시스템은 변경이 필요할 때 보다 유연하게 대응할 수 있음
- OS를 지정하고 설계하는 것은 소프트웨어 엔지니어링의 매우 창의적인 작업임
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Implementation

- 초기 OS는 주로 어셈블리 언어로 구현됨
- 이후 시스템 프로그래밍 언어로 알려진 Algol, PL/1과 같은 언어가 도입됨
- 현재는 C와 C++ 언어가 널리 사용되고 있음
- 대부분의 OS는 여러 언어를 혼합하여 사용함
- 가장 낮은 수준의 구현은 어셈블리 언어로, 주요 부분은 C 언어로 작성됨
- 시스템 프로그램은 C, C++ 외에도 PERL, Python, 쉘 스크립트와 같은 스크립팅 언어로 구현됨
- 더 높은 수준의 프로그래밍 언어는 다른 하드웨어로의 포팅이 쉬움
- 고급 언어는 실행 속도가 느릴 수 있습니다.
- 에뮬레이션을 통해 운영 체제는 원래의 하드웨어가 아닌 다른 플랫폼에서도 실행될 수 있음
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

● Simple Structure -- MS-DOS

- MS-DOS : 최소한의 공간에서 최대한의 기능을 제공하도록 설계됨
- 모듈들로 나뉘어 지지 않음
- MS-DOS는 어느 정도 구조화되어 있지만, 그 인터페이스와 기능 수준이 잘 분리되어 있진 않음
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Non Simple Structure  -- UNIX

- UNIX : 하드웨어에 의해 기능적으로 제한되며, 오리지널 UNIX OS는 구조가 제한되어 있음
- UNIX는 2개의 분리된 구조로 구성됨 (시스템 프로그래밍과 커널)
- 커널은 시스템 호출 인터페이스 아래와 물리적 하드웨어 위에 위치함
- 커널은 파일 시스템, CPU 스케쥴링, 메모리 관리와 다른 OS 기능들을 제공함
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

● Non Simple Structure  -- UNIX

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

● Layered Approach

- OS는 수만은 계층으로 나뉘며, 각 계층들은 하위 계층 위에 구축됨
- 최하위 계층은 하드웨어이고, 최상위 계층은 사용자 인터페이스임
- 모듈을 가진 계층들은 특정 기능들을 수행하고 오직 자신보다 낮은 계층의 서비스와 기능만을 사용함
 
 
 
 
 

반응형

'이론공부 > 시험공부' 카테고리의 다른 글

운영체제 (OS) - Chapter 04  (1) 2024.10.17
운영체제 (OS) - Chapter 03  (0) 2024.10.11
운영체제 (OS) - Chapter 01  (1) 2024.10.10
소프트웨어 공학 (3주차)  (1) 2024.09.13
컴퓨터 구조 ( 1~2주차)  (0) 2024.09.10