1. Four fundamental OS concepts
(1) Thread : single unique execution context
(parent process의 resource를 다 공유하면서도, 별도의 stack을 가진다.)
(스레드는 stack은 따로 사용하지만, 코드 영역과 데이터 영역은 하나를 공유한다.)
(데이터 영역의 변수를 통해서 쉽고 빠르게 통신 가능, 그러나 비정상 종료 시 모든 스레드 강제 종료.)
(2) Process : 컴퓨터에서 연속적으로 실행되고 있는 프로그램, 현재 실행 중인 프로그램
(프로세스는 서로 완전히 독립적인 공간을 가진다. 자기만의 스택, 데이터 영역을 가짐.)
(서로의 영역을 볼 수 없기에 프로세스 간의 통신은 번거롭다. 그러나 비정상 종료 시 서로 영향 X)
(3) Address Space with Translation
program은 [물리적 시스템의 메모리 공간]과 다른 주소 공간에서 실행한다.
(4) Dual Mode operation/Protection
'system'만 특정 자원에 액세스할 수 있다.
OS와 하드웨어는 user program(사용자 프로그램)으로부터 보호된다.
user program은 [프로그램 가상 주소]에서 [시스템 물리적 주소]로 변환을 controll하여 서로 격리된다.
2. Run Programs
3. OS concept
(1) Thread of Control
스레드 : 프로세스보다도 작은 실행 흐름의 최소 단위
하나의 프로세스에서 여러 개의 스레드가 메모리를 공유하며 작동, 그래서 생성과 속도가 빠르다.
특정 레지스터는 thread의 context를 보유한다.
스레드는 프로세서(processor)에 상주할 때, 프로세서(processor)에서 실행된다.
PC register는 [스레드에서 명령을 실행하는 주소]를 보유한다.
(2) Process (= 단일공간)
process : 권한이 제한된 실행 환경, 하나 이상의 스레드가 있는 주소 공간. 메모리(주소 공간)을 소유함
-> process는 프로그램이 수행될 시 무조건 생성된다. 또한 무조건 메모리가 할당된다.
-> 프로세스는 프로그램을 수행할 때, CPU를 써서 thread control이 일어난 순간 발생한다.
-> 프로세스 : 메모리 보호를 제공, 서로로부터 보호받음, OS도 보호
-> OS는 process를 생성, 죽이기 가능하다.
(3) Program's Address Space
각 프로세스는 고유의 [address space]를 가진다.
-> 32bit processor의 경우, 232= 약 40억 개의 주소를 가진다.
-> 주소를 읽거나 쓰면 어떻게 될까? A. Nothing happens. 일반 메모리처럼 동작할 듯.
(4) Dual Mode Operation
하드웨어의 두 가지 모드
-> Kernel mode : 커널 모드, OS Kernel의 모든 기능에 접근 가능. 모든 명령어와 HW에 접근 가능.
-> User mode : 사용자 모드, 제한된 시스템 자원에만 접근 가능. 하드웨어 제어엔 한계 있음.
하드웨어에서 'Dual mode' 작동을 지원하려면 무엇이 필요한가?
-> 비트 상태, 시스템/커널 모드에서만 허용되는 특정 작업, 시스템 모드를 지우고 적절한 user PC 복원
-> Syscall : 프로세스가 시스템 서비스를 요청, 프로세스 '외부'에서 '함수 호출'처럼 동작.
호출할 sys func의 주소는 없음.
-> Interrupt : 외부 asynchronous event triggers(비동기 이벤트 트리거 스위치).. ex : 타이머, I/O 장치
-> Trap or Exception : ex, segment default, Divide by zero
**이 3가지 모두 [프로그래밍되지 않은 제어 전송]이다.
4. Operating System Services
OS는 [프로그램과 서비스를 실행할 수 있는 환경]을 user에게 제공한다.
(1) User interface : 거의 모든 OS가 가지고 있다. GUI, 터치 스크린 등에 따라 다름
(2) Program execution : system은 메모리에 program을 로드하고, 그것을 실행할 수 있어야 함
(3) I/O 작업 : 실행 중인 프로그램에는 I/O가 필요할 수 있음
(4) File-system manipulation(조작) : program은 파일, 디렉터리를 읽고 쓰고 생성, 삭제, 검색 등을 수행
(5) Communications : process는 네트워크를 통해 동일한 컴퓨터 간의 정보 교환이 가능
(6) Error detection : OS에서 발생할 수 있는 오류를 지속적으로 인식해야 함(using 디버깅)
(7) Resource allocation : CPU가 특정 process를 사용할 수 있게, 각 사용자에게 자원을 할당
(8) Logging : 어떤 user가 얼마나 많은 컴퓨터 자원을 사용하는지 추척
(9) Protection and Security : 다중 사용자는 해당 정보를 제어하되, 프로세스끼리 서로 간섭하면 안됨
-> Protection : 시스템 자원에 대한 모든 엑세스 제어가 포함
-> Security : 외부 user로부터의 보호를 위해 사용자 인증 필요
5. Operating System Interface
(1) CLI, command interpreter
직접 명령 입력 가능, 커널 또는 시스템 프로그램에서 구현된다.
multiple flavorw가 구현된다. (ex : shell)
기본적으로 사용자로부터 명령을 가져와 실행된다.
(2) GUI
User-friendly desktop metaphor interface
-> 마우스, 키보드, 모니터, 아이콘(파일, 프로그램 등) 등이 있다.
많은 시스템들이 현재 CLI와 GUI를 모두 포함한다.
6. System call
API(application programming interface)를 통해 프로그램에서 액세스한다.
Win32 API, POSIX API, Java API 등이 있다.
<System-call interface>
각 시스템 별로 호출 번호가 있다.
System-call interface는 이 숫자에 따라 인덱스된 테이블을 유지한다.
그 다음 OS 커널에서 의도된 시스템 호출을 호출하고, 시스템 호출의 상태와 모든 반환값을 반환한다.
caller는 많은 것을 알 필요가 없다. API 준수하고, OS의 수행 작업을 이해만 하면 된다.
<System-call Parameter passing>
when 원하는 시스템 호출의 ID보다 더 많은 정보가 필요할 때,
register에 매개 변수를 전달한다. (pass the parameters in regs)
-> 레지스터보다 매개 변수가 많을 경우 stack 알고리즘을 사용하여 유연하게 ~~
<Types of System-call>
Process control, File management, Device magagement, Information maintenance, Communications,
Protection 등이 있다.
7. Linkers and Loaders
(1) relocatable object file : 어떠한 물리적 memory location으로 load가 가능하게 디자인 된 소스코드
(2) Linker는 이를 single binary executable file로 결합한다. library도 가져온다.
(3) program은 binary executable로써 secondary storage에 거주한다.
(4) 실행되려면, loader에서 memory로 가져와야 한다.
-> relocation은 프로그램 부분에 최종 주소를 할당, 해당 값과 일치하도록 프로그램의 코드, 데이터를 조정
(*) Modern general ..
-> 라이브러리를 실행 파일로 연결하지 X, 동적으로 연결된 라이브러리가 필요에 따라 로드됨
-> 개체, 실행 파일은 표준 형식. OS에서 로드 및 시작 방법을 알 수 있다.
8. OS Design and Implementation
<Application Minary Interface, ABI>
API와 동일한 아키텍처.
주어진 아키텍처나 주어진 OS에서 [binary code의 다양한 구성요소]가 어떻게 인터페이스 될 것인가
<OS Design and Implementation>
User goal : OS는 사용이 편하고 배우기 쉬우며, 신뢰할 수 있고 안전하며 신속해야 한다.
System goal : OS는 설계, 구현 및 유지보수가 용이해야 하며 유연하고 신뢰 가능하며 오류가 없어야 한다.
-> Important principle(분리해야 하는 중요한 원칙)
Policy : What will be done?, Mechanism : How to do it?
9. OS Structure
<real time OS와 general purpose OS의 차이점>
<Monolithic Structure>
original UNIX이다. 모든 커널이 하나로 묶여 있다.
<Layered Approach>
모든 프로토콜이 7layer로 설명된다.
맨 아래 계층은 하드웨어고, 가장 높은 계층은 사용자 인터페이스이다.
모듈화를 통해 각 계층은 하위 계층(의 기능과 서비스)만 선택 가능.
<Microkernels>
메세지 전달을 사용하여 사용자 모듈 간에 통신이 이루어진다.
(**) 그 외에도 Hybrid system, Darwin, Android 아키텍처 등이 있다.
10. Building and Booting an OS
일반적으로 구입한 시스템에 운영 체제가 이미 설치되어 있다.
그러나 일부 다른 OS를 구축, 설치할 수 있다.
-> OS 소스 코드 작성, 실행할 시스템에 대한 OS 구성, OS 컴파일, OS 설치, 컴퓨터와 새 OS 부팅
이것이 바로 web browser에 붙어있는 virtual machine이 하는 일이다.
11. OS Debugging
디버깅 : 오류 또는 버그를 찾아 수정하는 것. performance 튜닝도 가능하다.
OS에서 오류 정보가 포함된 로그 파일을 생성한다.
-> Core dump : 응용 프로그램 실패 시 생성, 프로세스의 memory를 캡처한다.
-> Crach dump : OS의 오류로 인해 생성, 커널 memory를 포함한다.
(**) Process Memory Protection : OS는 user program으로부터 스스로를 보호해야 한다.
(**) 출처 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
'KNU_study > 운영체제' 카테고리의 다른 글
운영체제(6) Synchronization Tools & Examples (0) | 2023.06.12 |
---|---|
운영체제(5) CPU Scheduling (1) | 2023.05.18 |
운영체제(4) Thread (0) | 2023.05.18 |
운영체제(3) Process (0) | 2023.05.16 |
운영체제(1) OS (0) | 2023.05.10 |