5 min read

OSTEP 09 Lottery Scheduling

Table of Contents

μ•žμ—μ„œ 배운 λ°˜ν™˜ μ‹œκ°„ ν˜Ήμ€ 응닡 μ‹œκ°„μ„ μ΅œμ ν™”ν•˜λŠ” μŠ€μΌ€μ€„λŸ¬ λŒ€μ‹ , 각 μž‘μ—…μ—κ²Œ CPU의 일정 λΉ„μœ¨μ„ 보μž₯ν•˜λŠ” 것이 λͺ©μ μΈ λΉ„λ‘€ λ°°λΆ„ μŠ€μΌ€μ€„λŸ¬μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.

1. μΆ”μ²¨κΆŒ (ν‹°μΌ“)

전체 ν‹°μΌ“ 쀑 ν”„λ‘œμ„ΈμŠ€κ°€ λ³΄μœ ν•œ ν‹°μΌ“μ˜ λΉ„μœ¨μ΄ λ°›μ•„μ•Ό ν•  CPU μžμ›μ˜ λΉ„μœ¨μ΄λ‹€. 그리고 νƒ€μž„ 슬라이슀 ν•œ λ²ˆλ§ˆλ‹€ 전체 ν‹°μΌ“ 쀑 ν•˜λ‚˜λ₯Ό λ¬΄μž‘μœ„λ‘œ μΆ”μ²¨ν•˜μ—¬ μ‹€ν–‰ν•  ν”„λ‘œμ„ΈμŠ€λ₯Ό κ²°μ •ν•œλ‹€.

0λΆ€ν„° 99κΉŒμ§€μ˜ ν‹°μΌ“ 쀑 Aκ°€ 0λΆ€ν„° 74, Bκ°€ 75μ—μ„œ 99κΉŒμ§€μ˜ 티켓을 κ°€μ§€κ³  μžˆλ‹€κ³  ν•˜μž. OSTEP 09 Lottery Scheduling-1688318106781.jpeg OSTEP 09 Lottery Scheduling-1688318090682.jpeg μ΄λ ‡κ²Œ λ½‘νžŒ ν‹°μΌ“ 값에 따라 μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν• μ§€ κ²°μ •ν•œλ‹€. 전체 20개의 νƒ€μž„ 슬라이슀 쀑, BλŠ” 4개(20%) 의 νƒ€μž„ 슬라이슀λ₯Ό νšλ“ν–ˆλ‹€. λͺ©ν‘œλ‘œ ν–ˆλ˜ 25%λ³΄λ‹€λŠ” μ μ§€λ§Œ, μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ μ§€λ‚ μˆ˜λ‘ 25%에 κ°€κΉŒμ›Œμ§ˆ 것이닀.

2. 좔첨 기법

1. μΆ”μ²¨κΆŒ 화폐(ticket currency)

티켓을 ν™”νμ²˜λŸΌ, ν™˜μœ¨μ„ μ μš©ν•΄μ„œ μŠ€μΌ€μ€„λ§ν•˜λŠ” 기법이닀. 각각의 μ‚¬μš©μžκ°€ 100μž₯의 global 티켓을 λ°›μ•˜λ‹€κ³  κ°€μ •ν•˜μž. μ‚¬μš©μž AλŠ” ν”„λ‘œμ„ΈμŠ€ A1, A2 두 개λ₯Ό 싀행쀑이고, μžμ‹ μ΄ μ •ν•œ ν‹°μΌ“ 1000μž₯ 쀑 500μž₯μ”© A1, A2에 ν• λ‹Ήν–ˆλ‹€. μ‚¬μš©μž BλŠ” ν”„λ‘œμ„ΈμŠ€ B에 μžμ‹ μ΄ μ •ν•œ ν‹°μΌ“ 10μž₯ 쀑 10μž₯을 ν• λ‹Ήν–ˆλ‹€. ν™˜μœ¨μ„ μ μš©ν•˜λ©΄, A1은 50μž₯, A2λŠ” 50μž₯, BλŠ” 100μž₯의 global 티켓을 λ°›λŠ”λ‹€.

2. μΆ”μ²¨κΆŒ 양도(ticket transfer)

ν”„λ‘œμ„ΈμŠ€κ°€ μΌμ‹œμ μœΌλ‘œ 티켓을 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λ„˜κ²¨μ€„ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ²„μ—κ²Œ νŠΉμ • μž‘μ—…μ„ λŒ€μ‹ ν•΄λ‹¬λΌκ³  μš”μ²­ν•  λ•Œ, 티켓을 ν•¨κ»˜ λ„˜κ²¨μ£Όμ–΄ μž‘μ—…μ΄ 빨리 μ™„λ£Œλ  수 μžˆλ„λ‘ ν•œλ‹€.

3. μΆ”μ²¨κΆŒ 팽창(ticket inlation)

ν”„λ‘œμ„ΈμŠ€κ°€ μΌμ‹œμ μœΌλ‘œ μžμ‹ μ΄ μ†Œμœ ν•œ ν‹°μΌ“μ˜ 수λ₯Ό λŠ˜μ΄κ±°λ‚˜ 쀄일 수 μžˆλ‹€. 그런데 μ΄λ ‡κ²Œ ν•˜λ©΄ ν•˜λ‚˜μ˜ μš•μ‹¬ λ§Žμ€ ν”„λ‘œμ„ΈμŠ€κ°€ 맀우 λ§Žμ€ μ–‘μ˜ μΆ”μ²¨κΆŒμ„ μžμ‹ μ—κ²Œ ν• λ‹Ήν•  수 μžˆλ‹€. λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€κ°„ μ‹ λ’° κ°€λŠ₯ν•œ μ‹œμŠ€ν…œμ—μ„œ μœ μš©ν•˜λ‹€. μΆ”μ²¨κΆŒ μ–‘λ„μ²˜λŸΌ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ 톡신할 ν•„μš” 없이, 혼자 티켓을 늘렀 CPU μžμ›μ„ 많이 받을 수 μžˆλ‹€.

3. κ΅¬ν˜„

λ‚œμˆ˜ λ°œμƒκΈ°, ν”„λ‘œμ„ΈμŠ€λ“€μ˜ 집합을 ν‘œν˜„ν•˜λŠ” 자료 ꡬ쑰, μΆ”μ²¨κΆŒμ˜ 전체 개수 μ΄λ ‡κ²Œ 3개만 있으면 κ΅¬ν˜„ν•  수 μžˆλ‹€.

OSTEP 09 Lottery Scheduling-1688318859577.jpeg

OSTEP 09 Lottery Scheduling-1688318865724.jpeg

AλŠ” 0λΆ€ν„° 99, BλŠ” 100λΆ€ν„° 149, CλŠ” 150λΆ€ν„° 399κΉŒμ§€ 티켓을 ν• λ‹Ήλ°›λŠ”λ‹€. winner에 λ‚œμˆ˜ 300이 ν• λ‹Ήλ˜μ—ˆλ‹€κ³  ν•˜μž. 리슀트λ₯Ό μ•žμ—μ„œλΆ€ν„° μˆœνšŒν•˜λ©΄μ„œ counter의 값을 μ¦κ°€μ‹œν‚¨λ‹€. Aλ₯Ό λ§Œλ‚˜λ©΄ 100, Bλ₯Ό λ§Œλ‚˜λ©΄ 150이 λœλ‹€. Cλ₯Ό λ§Œλ‚˜λ©΄ 400이 λ˜μ–΄ λ‚œμˆ˜ 300보닀 μ»€μ§€λ―€λ‘œ λ‹Ήμ²¨μžλ₯Ό 찾은 것이닀. 리슀트λ₯Ό λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ (ν‹°μΌ“ 많이 받은 ν”„λ‘œμ„ΈμŠ€κ°€ μ•žμ— μ˜€λ„λ‘) ν•˜λ©΄ μ’€ 더 νš¨μœ¨μ μ΄λ‹€.

4. 예제

같은 개수의 티켓을 λ³΄μœ ν•˜κ³  있고, λ™μΌν•œ μ‹€ν–‰ μ‹œκ°„μ„ κ°€μ§€λŠ” ν”„λ‘œμ„ΈμŠ€ 두 개의 μˆ˜ν–‰ μ‹œκ°„μ„ μ‚΄νŽ΄λ³΄μž. 두 ν”„λ‘œμ„ΈμŠ€λ₯Ό 거의 λ™μ‹œμ— μ’…λ£Œμ‹œν‚€λŠ” 것이 λͺ©ν‘œλ‹€.

첫 번째 μž‘μ—…μ΄ μ’…λ£Œλœ μ‹œκ°„μ„ 두 번째 μž‘μ—…μ΄ μ’…λ£Œλœ μ‹œκ°„μœΌλ‘œ λ‚˜λˆˆ μ§€ν‘œμΈ λΆˆκ³΅μ • μ§€ν‘œμΈ UUλ₯Ό μ •μ˜ν•˜μž. UUκ°€ 1일 λ•Œ, μŠ€μΌ€μ€„λŸ¬λŠ” μ™„λ²½ν•œ 곡정 μŠ€μΌ€μ€„λŸ¬μ΄λ‹€.

OSTEP 09 Lottery Scheduling-1688319451851.jpeg

μž‘μ—…μ˜ μ‹œκ°„μ΄ 짧은 경우, λ¬΄μž‘μœ„μ„±μ— 영ν–₯을 많이 λ°›μ•„ λΆˆκ³΅μ • μ§€ν‘œκ°€ 1에 가깝지 μ•Šκ³ , μž‘μ—…μ˜ μ‹œκ°„μ΄ κΈ΄ 경우 λ¬΄μž‘μœ„μ„±μ— 영ν–₯을 덜 λ°›μ•„ λΆˆκ³΅μ • μ§€ν‘œκ°€ 1에 κ°€κΉκ²Œ λ‚˜μ˜¨λ‹€.

μž‘μ—…μ˜ 길이가 κΈΈμ–΄μ•Ό 좔첨 μŠ€μΌ€μ€„λŸ¬λ₯Ό 톡해 μ›ν•˜λŠ” κ²°κ³Ό (κ³΅μ •ν•œ μŠ€μΌ€μ€„λŸ¬) λ₯Ό 얻을 수 μžˆλ‹€.

5. ν‹°μΌ“ λ°°λΆ„ 방식

티켓을 μ–΄λ–»κ²Œ ν• λ‹Ήν•˜λŠλƒλŠ” λ¬Έμ œλŠ” ꡉμž₯히 μ–΄λ €μš΄ λ¬Έμ œμ΄λ‹€. ν•œ κ°€μ§€ μ ‘κ·Ό 방식은 μ‚¬μš©μžκ°€ μ–΄λ–»κ²Œ λ°°λΆ„ν•΄μ•Ό ν• μ§€ μ•Œκ³  μžˆλ‹€κ³  κ°€μ •ν•˜κ³ , μ‚¬μš©μžμ—κ²Œ λͺ¨λ‘ λ§‘κΈ°λŠ” 것이닀. μ‚¬μš©μžμ—κ²Œ 티켓을 μ£Όκ³ , μ‹€ν–‰μ‹œν‚€κ³ μž ν•˜λŠ” μž‘μ—…λ“€μ—κ²Œ 티켓을 λ°°λΆ„ν•œλ‹€. ν•˜μ§€λ§Œ 이 방법은 해결책이 될 수 μ—†λ‹€.

6. μ™œ 결정둠적 (Deterministic) 방법을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”κ°€

μœ„μ—μ„œ λ³Έ 바와 같이, λ¬΄μž‘μœ„μ„±μ„ μ΄μš©ν•˜λ©΄ μŠ€μΌ€μ€„λŸ¬λ₯Ό λ‹¨μˆœν•˜κ²Œ λ§Œλ“€ 수 μžˆμ§€λ§Œ μ •ν™•ν•œ λΉ„μœ¨μ„ 보μž₯ν•  수 μ—†λ‹€. 특히 짧은 κΈ°κ°„λ§Œ μ‹€ν–‰λ˜λŠ” κ²½μš°λŠ” λ”μš± μ‹¬ν•˜λ‹€. λ•Œλ¬Έμ— 결정둠적 곡정 λ°°λΆ„ μŠ€μΌ€μ€„λŸ¬μΈ 보폭 μŠ€μΌ€μ€„λ§(stride scheduling)을 κ³ μ•ˆν–ˆλ‹€.

보폭 μŠ€μΌ€μ€„λ§(Stride Scheduling)

μ‹œμŠ€ν…œμ˜ 각 μž‘μ—…μ€ β€˜λ³΄ν­β€™μ΄λΌλŠ” 값을 κ°€μ§€κ³  μžˆλ‹€. 이 보폭은 ν•΄λ‹Ή μž‘μ—…μ΄ κ°€μ§€κ³  μžˆλŠ” μΆ”μ²¨κΆŒ μˆ˜μ— λ°˜λΉ„λ‘€ν•˜λŠ” 값이닀. 예λ₯Ό λ“€μ–΄, μž‘μ—… A, B, Cκ°€ 각각 100, 50, 250의 μΆ”μ²¨κΆŒμ„ κ°€μ§€κ³  μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž. μ΄λ•Œ μž„μ˜μ˜ 큰 값을 각 μž‘μ—…μ˜ μΆ”μ²¨κΆŒ 개수둜 λ‚˜λˆ„μ–΄ 보폭을 계산할 수 μžˆλ‹€. μ—¬κΈ°μ„œλŠ” 10,000을 각 μž‘μ—…μ˜ μΆ”μ²¨κΆŒ 개수둜 λ‚˜λˆ„λ©΄, 각 μž‘μ—…μ˜ 보폭은 100, 200 및 40이 λœλ‹€.

이제 각 μž‘μ—…μ΄ CPUλ₯Ό μ‚¬μš©ν•  λ•Œλ§ˆλ‹€, β€˜passβ€™λΌλŠ” 값이 보폭만큼 μ¦κ°€ν•©λ‹ˆλ‹€. 이 β€˜pass’ 값은 ν•΄λ‹Ή μž‘μ—…μ΄ μ–Όλ§ˆλ‚˜ 많이 CPUλ₯Ό μ‚¬μš©ν–ˆλŠ”μ§€λ₯Ό μΆ”μ ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μŠ€μΌ€μ€„λŸ¬λŠ” 이 보폭과 pass 값을 μ‚¬μš©ν•˜μ—¬ μ–΄λ–€ μž‘μ—…μ„ λ‹€μŒμœΌλ‘œ μ‹€ν–‰μ‹œν‚¬μ§€λ₯Ό κ²°μ •ν•œλ‹€. κ°€μž₯ μž‘μ€ pass 값을 κ°€μ§„ μž‘μ—…μ„ μ„ νƒν•˜κ³ , κ·Έ μž‘μ—…μ„ μ‹€ν–‰ν•œ ν›„μ—λŠ” ν•΄λ‹Ή μž‘μ—…μ˜ pass 값을 보폭만큼 μ¦κ°€μ‹œν‚¨λ‹€. 보폭 μŠ€μΌ€μ€„λ§μ€ 각 μŠ€μΌ€μ€„λ§ μ£ΌκΈ°λ§ˆλ‹€ μ •ν™•ν•œ λΉ„μœ¨λ‘œ CPUλ₯Ό λ°°λΆ„ν•œλ‹€.

OSTEP 09 Lottery Scheduling-1688320073390.jpeg

μ™œ 보폭 μŠ€μΌ€μ€„λ§μ΄ μ•„λ‹Œ 좔첨 μŠ€μΌ€μ€„λ§μ„ μ‚¬μš©ν•˜λŠ”κ°€?

좔첨 μŠ€μΌ€μ€„λ§μ—λŠ” 보폭 μŠ€μΌ€μ€„λ§μ΄ κ°€μ§€κ³  μžˆμ§€ μ•Šμ€ λ©‹μ§„ νŠΉμ„±μ΄ 있기 λ•Œλ¬Έ. λ°”λ‘œ μƒνƒœ 정보가 ν•„μš” μ—†λ‹€λŠ” 점이닀.

보폭 μŠ€μΌ€μ€„λ§μ—μ„œλŠ” μŠ€μΌ€μ€„λ§ 쀑간에 μƒˆλ‘œμš΄ μž‘μ—…μ΄ μ‹œμŠ€ν…œμ— λ„μ°©ν•˜λ©΄, κ·Έ μž‘μ—…μ˜ pass 값이 μ–Όλ§ˆκ°€ λ˜μ–΄μ•Ό ν• μ§€ κ²°μ •ν•΄μ•Ό ν•œλ‹€. 그런데 좔첨 μŠ€μΌ€μ€„λ§μ—μ„œλŠ” μ΄λŸ¬ν•œ 정보가 ν•„μš” μ—†λ‹€. μƒˆλ‘œμš΄ μž‘μ—…μ΄ 좔가될 λ•Œ, κ·Έλƒ₯ μƒˆ μž‘μ—…μ΄ κ°€μ§„ μΆ”μ²¨κΆŒμ˜ 개수λ₯Ό 전체 μΆ”μ²¨κΆŒμ˜ κ°œμˆ˜μ— μΆ”κ°€ν•˜κ³  μŠ€μΌ€μ€„λ§μ„ μˆ˜ν–‰ν•˜λ©΄ λœλ‹€. λ”°λΌμ„œ, 좔첨 μŠ€μΌ€μ€„λ§μ—μ„œλŠ” μƒˆλ‘œμš΄ μž‘μ—…μ„ μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆλ‹€.

λΉ„λ‘€ λ°°λΆ„ μŠ€μΌ€μ€„λŸ¬λŠ” μΆ”μ²¨κΆŒ ν• λ‹ΉλŸ‰μ„ 비ꡐ적 μ •ν™•ν•˜κ²Œ κ²°μ •ν•  수 μžˆλŠ” ν™˜κ²½μ—μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, 가상화 데이터 μ„Όν„°μ—μ„œ Windows 가상 머신에 CPU μ‚¬μ΄ν΄μ˜ 1/4을 ν• λ‹Ήν•˜κ³  λ‚˜λ¨Έμ§€λŠ” Linux μ‹œμŠ€ν…œμ— ν• λ‹Ήν•˜κ³  싢은 경우 λΉ„λ‘€ 배뢄이 κ°„λ‹¨ν•˜κ³  νš¨κ³Όμ μ΄λ‹€.

OSTEP ꡐ재 μ°Έκ³