Process : 프로세스
  • 실행중에 있는 프로그램
  • 프로세서에 할당되어 실행 될 수 있는 entity
  • 프로세스 제어 블록(PCB : Process Control Block)을 할당 받는 개체
  • 컴퓨터에서 실행되는 프로그램의 인스턴스



Reasons for Process Creation : 프로세스의 생성 이유
  1. OS에 의해 생성
  2. Interactive login  - 터미널에서 사용자가 시스템에 로그인
  3. 존재하는 프로세스에 의해 생성 - 사용자 프로그램은 OS에게 자식 프로세스를 생성하라고 요청 할 수 있다.
  4. user command에 의해 생성 
 ☞ foreground (interactive) mode에서 프로그램 실행   
 ☞ background (batch) mode에서 프로그램 실행





Process States : 프로세스 상태   

  • Dispatcher(kernel function)은 PC(Program Counter)에 있는 주소값을 가져와서 한 프로세스로부터 다른 프로세스로 switch 해준다. ( 다른 프로세스로 자원을 할당해준다)
  • 프로그램 카운터(Program Counter,PC)는 중앙처리장치 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 Process의 주소값이 저장되어있다. (=명령어 포인터)

<Five-State Process Model>
  • Ready : Process가 CPU를 점유 할 준비가 된 상태
  • Running : Process가 CPU를 점유하고 있는 상태
  • Blocked (= wait state, sleep state) : Process가 event가 나타나는 것을 기다리는 상태 (ex. I/O completion)




프로세스 제어 블록 ( PCB : Process Control Block) = (TCB : Task Contol Block)
  • 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조
  • 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 Terminated 되면 PCB는 제거
  • OS에 의해 만들어지고 관리
  • PCB가 가지고 있는 정보
              프로세스 식별자(Process Identifier)
             프로세스 상태 (Process State) 
             프로그램 카운터 (PC:Program Counter)
             메모리 관리 정보 : 해당 프로세스의 주소 공간 등
             CPU 레지스터 및 일반 레지스터
             CPU 스케줄링 정보 : 우선순위, 최종 실행시각, CPU 점유시간 등
             프로세스 계정 정보 : 페이지 테이블, 스케쥴링 큐 포인터, 소유자, 부모 등
             입출력 상태 정보



 프로세스 문맥 ( Process Context )
  • Context : 프로그램의 실행 환경
  • User Context 
             - Code : 실행 될 사용자 프로그램 코드 (instructions) 
             - Data : 프로세스의 전역 변수
             - User Stack
                    LIFO 구조
                    사용자 기능을 호출하는 정보를 저장하는 데 사용 (  함수의 지역 변수, 함수의 인자, register value )
  • System Context
             System stack ( kernel stack) : 커널 함수를 호출하기 위한 정보를 저장하는 데 사용
             Process Control Block (PCB) : 프로세스를 제어하기 위해 운영 체제에 필요한 데이터



'운영체제' 카테고리의 다른 글

교착상태(Deadlock)  (0) 2018.08.28
세마포어와 뮤텍스 (Semaphores&Mutex)  (0) 2018.08.26
병행성과 상호배제&상호배제 알고리즘  (0) 2018.08.26
Thread  (0) 2018.08.24
Context Switch (문맥 교환)  (0) 2018.08.23

 쉬운 문제지만 코틀린을 배우는 초기단계라 review 하겠습니다


 해결방법 : "CAMBRIDGE" 에 들어간 알파벳을 input에서 빼고 출력하는 문제입니다. 

대문자만 필요하므로 크기 26짜리 배열 alpha를 Boolean 배열로 선언하고, 

"CAMBRIDGE"의 알파벳 하나하나의 자리에 true로 하였습니다.

그리고 입력받은 input에 filter을 통해 true가 아닌것 (즉, false 인 것)만 출력하도록 하였습니다.


 ▼ 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.io.BufferedReader
import java.io.InputStreamReader
 
fun main(args: Array<String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val chk = "CAMBRIDGE"
    val alpha = BooleanArray(26)
    chk.forEach { alpha[it.toInt() - 65= true }
 
    val input = br.readLine()
    input.filter { !alpha[it.toInt() - 65] }.forEach { print(it) }
    println()
}
cs





  Kotlin의 Any Class와 타입 체크



※ 정리

 ☞ Any : kotlin.Any 모든 코틀린 클래스의 최상위 (java.lang.Object)

 ☞ type check : 런타임에서 type을 검사,  'is' , '!is' 연산자 (java의 instanceOf와 같음)




 ▶ Any type은 어떠한 자료형으로도 바뀔 수 있습니다.

 ▶ a3의 type이 처음에는 String -> Double형 -> Boolean 형으로 바뀐다.


1
2
3
4
5
    val a: Any = 1234  // kotlin.Any,  코틀린의 최상위 타입 클래스=? java Object와 비슷하지만 똑같지는 않다
    val a2: Any = 'A'
    var a3: Any = "xyz"
    a3 = 3.141592  // double
    a3 = true // boolean
cs

 




 ▶ Type checkis로 한다. 

 ▶ 만약, 아닌 것을 판달할 때에는 is 앞에 !을 붙인다. ex) 7번째줄에서... val b2 = b1 !is Int

 ▶ 7번째 줄에서, b1이 Int형이면 b2는 true, Int형이 아니면 false가 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
    val a: Any = 1234  // kotlin.Any,  코틀린의 최상위 타입 클래스=? java Object와 비슷하지만 똑같지는 않다
    val a2: Any = 'A'
    var a3: Any = "xyz"
    a3 = 3.141592  // double
    a3 = true // boolean
    val b1 = 365
    val b2 = b1 is Int  // 'is' type check => java의 instanceOf
 
    println("b1 is Int = ${b1 is Int}, b2 = ${b2}")
    println("a is Int = ${a is Int}")
    println("a2 is Char = ${a2 is Char}")
    println("a3 is Boolean = ${a3 is Boolean}")
    println("a3 is String = ${a3 is String}")
cs




 ▼ 위 코드의 결과 화면




 



'Kotlin' 카테고리의 다른 글

[Kotlin] null가능형, 예외 및 null 안전성  (0) 2018.09.20
[Kotlin] 기본 자료형, 변수와 상수  (0) 2018.07.18

+ Recent posts