{"id":3226,"date":"2025-06-09T08:36:52","date_gmt":"2025-06-09T08:36:52","guid":{"rendered":"https:\/\/diznr.com\/?p=3226"},"modified":"2025-06-09T08:36:52","modified_gmt":"2025-06-09T08:36:52","slug":"day-02part-06-operating-system-for-gate-shortest-job-first-algorithm-scheduling","status":"publish","type":"post","link":"https:\/\/www.reilsolar.com\/pdf\/day-02part-06-operating-system-for-gate-shortest-job-first-algorithm-scheduling\/","title":{"rendered":"Day 02Part 06- Operating System for Gate &#8211; Shortest Job First Scheduling Algorithm"},"content":{"rendered":"<p>Day 02Part 06- Operating System for Gate &#8211; Shortest Job First Scheduling Algorithm<\/p>\n<p>[fvplayer id=&#8221;307&#8243;]<\/p>\n<h3 data-start=\"0\" data-end=\"55\"><strong data-start=\"4\" data-end=\"53\">\u00a0Day 02 Part 06 &#8211; Operating System for GATE<\/strong><\/h3>\n<h3 data-start=\"56\" data-end=\"111\"><strong data-start=\"60\" data-end=\"109\">Shortest Job First (SJF) Scheduling Algorithm<\/strong><\/h3>\n<h3 data-start=\"118\" data-end=\"154\"><strong data-start=\"122\" data-end=\"152\">\u00a0What is SJF Scheduling?<\/strong><\/h3>\n<p data-start=\"155\" data-end=\"297\"><strong data-start=\"155\" data-end=\"183\">Shortest Job First (SJF)<\/strong> is a <strong data-start=\"189\" data-end=\"217\">CPU scheduling algorithm<\/strong> that selects the process with the <strong data-start=\"252\" data-end=\"275\">smallest burst time<\/strong> for execution next.<\/p>\n<p data-start=\"299\" data-end=\"405\">It is also known as <strong data-start=\"319\" data-end=\"357\">Shortest Next CPU Burst Scheduling<\/strong>.<br data-start=\"358\" data-end=\"361\" \/>There are <strong data-start=\"371\" data-end=\"384\">two types<\/strong> of SJF scheduling:<\/p>\n<ol data-start=\"406\" data-end=\"624\">\n<li data-start=\"406\" data-end=\"498\"><strong data-start=\"409\" data-end=\"431\">Non-Preemptive SJF<\/strong> &#8211; Once a process starts execution, it <strong data-start=\"470\" data-end=\"495\">cannot be interrupted<\/strong>.<\/li>\n<li data-start=\"499\" data-end=\"624\"><strong data-start=\"502\" data-end=\"559\">Preemptive SJF (Shortest Remaining Time First &#8211; SRTF)<\/strong> &#8211; The process can be <strong data-start=\"581\" data-end=\"596\">interrupted<\/strong> if a shorter job arrives.<\/li>\n<\/ol>\n<h3 data-start=\"631\" data-end=\"664\"><strong data-start=\"635\" data-end=\"664\">\u00a0Characteristics of SJF<\/strong><\/h3>\n<p data-start=\"665\" data-end=\"845\"><strong data-start=\"667\" data-end=\"678\">Optimal<\/strong> in reducing <strong data-start=\"691\" data-end=\"715\">average waiting time<\/strong><br data-start=\"715\" data-end=\"718\" \/><strong data-start=\"720\" data-end=\"742\">Best case scenario<\/strong> for batch processing<br data-start=\"763\" data-end=\"766\" \/><strong data-start=\"768\" data-end=\"811\">Difficult to implement in real-world OS<\/strong> (because burst time is unknown)<\/p>\n<h3 data-start=\"852\" data-end=\"891\"><strong data-start=\"856\" data-end=\"889\">\u00a0Non-Preemptive SJF Example<\/strong><\/h3>\n<p data-start=\"892\" data-end=\"956\">Let&#8217;s consider <strong data-start=\"907\" data-end=\"922\">4 processes<\/strong> with the following burst times:<\/p>\n<table data-start=\"958\" data-end=\"1187\">\n<thead data-start=\"958\" data-end=\"997\">\n<tr data-start=\"958\" data-end=\"997\">\n<th data-start=\"958\" data-end=\"968\">Process<\/th>\n<th data-start=\"968\" data-end=\"983\">Arrival Time<\/th>\n<th data-start=\"983\" data-end=\"997\">Burst Time<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"1036\" data-end=\"1187\">\n<tr data-start=\"1036\" data-end=\"1073\">\n<td>P1<\/td>\n<td>0<\/td>\n<td>7<\/td>\n<\/tr>\n<tr data-start=\"1074\" data-end=\"1111\">\n<td>P2<\/td>\n<td>2<\/td>\n<td>4<\/td>\n<\/tr>\n<tr data-start=\"1112\" data-end=\"1149\">\n<td>P3<\/td>\n<td>4<\/td>\n<td>1<\/td>\n<\/tr>\n<tr data-start=\"1150\" data-end=\"1187\">\n<td>P4<\/td>\n<td>5<\/td>\n<td>4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 data-start=\"1189\" data-end=\"1221\"><strong data-start=\"1194\" data-end=\"1221\">Step-by-Step Execution:<\/strong><\/h4>\n<ol data-start=\"1222\" data-end=\"1557\">\n<li data-start=\"1222\" data-end=\"1300\"><strong data-start=\"1225\" data-end=\"1237\">At t = 0<\/strong>, <strong data-start=\"1239\" data-end=\"1245\">P1<\/strong> starts execution (since no other process has arrived).<\/li>\n<li data-start=\"1301\" data-end=\"1358\"><strong data-start=\"1304\" data-end=\"1316\">At t = 2<\/strong>, <strong data-start=\"1318\" data-end=\"1332\">P2 arrives<\/strong>, but P1 is still running.<\/li>\n<li data-start=\"1359\" data-end=\"1391\"><strong data-start=\"1362\" data-end=\"1374\">At t = 4<\/strong>, <strong data-start=\"1376\" data-end=\"1390\">P3 arrives<\/strong>.<\/li>\n<li data-start=\"1392\" data-end=\"1446\"><strong data-start=\"1395\" data-end=\"1407\">At t = 7<\/strong>, <strong data-start=\"1409\" data-end=\"1445\">P3 (Shortest Job: 1) is selected<\/strong>.<\/li>\n<li data-start=\"1447\" data-end=\"1501\"><strong data-start=\"1450\" data-end=\"1462\">At t = 8<\/strong>, <strong data-start=\"1464\" data-end=\"1500\">P2 (Shortest Job: 4) is selected<\/strong>.<\/li>\n<li data-start=\"1502\" data-end=\"1557\"><strong data-start=\"1505\" data-end=\"1518\">At t = 12<\/strong>, <strong data-start=\"1520\" data-end=\"1556\">P4 (Shortest Job: 4) is selected<\/strong>.<\/li>\n<\/ol>\n<h4 data-start=\"1559\" data-end=\"1582\"><strong data-start=\"1564\" data-end=\"1580\">Gantt Chart:<\/strong><\/h4>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-[5px] h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none\"><\/div>\n<div class=\"sticky top-9\">\n<div class=\"absolute bottom-0 right-0 flex h-9 items-center pr-2\"><\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre\">| P1 | P3 | P2 | P4 |<br \/>\n0    7    8   12   16<br \/>\n<\/code><\/div>\n<\/div>\n<h4 data-start=\"1636\" data-end=\"1692\"><strong data-start=\"1641\" data-end=\"1690\">Calculation of Waiting Time &amp; Turnaround Time<\/strong><\/h4>\n<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">Waiting\u00a0Time=Turnaround\u00a0Time\u2212Burst\u00a0Time\\text{Waiting Time} = \\text{Turnaround Time} &#8211; \\text{Burst Time}<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mord text\"><span class=\"mord\">Waiting\u00a0Time<\/span><\/span><span class=\"mrel\">=<\/span><\/span><span class=\"base\"><span class=\"mord text\"><span class=\"mord\">Turnaround\u00a0Time<\/span><\/span><span class=\"mbin\">\u2212<\/span><\/span><span class=\"base\"><span class=\"mord text\"><span class=\"mord\">Burst\u00a0Time<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<table data-start=\"1767\" data-end=\"2350\">\n<thead data-start=\"1767\" data-end=\"1868\">\n<tr data-start=\"1767\" data-end=\"1868\">\n<th data-start=\"1767\" data-end=\"1777\">Process<\/th>\n<th data-start=\"1777\" data-end=\"1792\">Arrival Time<\/th>\n<th data-start=\"1792\" data-end=\"1805\">Burst Time<\/th>\n<th data-start=\"1805\" data-end=\"1823\">Completion Time<\/th>\n<th data-start=\"1823\" data-end=\"1847\">Turnaround Time (TAT)<\/th>\n<th data-start=\"1847\" data-end=\"1868\">Waiting Time (WT)<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"1967\" data-end=\"2350\">\n<tr data-start=\"1967\" data-end=\"2062\">\n<td>P1<\/td>\n<td>0<\/td>\n<td>7<\/td>\n<td>7<\/td>\n<td>7 &#8211; 0 = 7<\/td>\n<td>0<\/td>\n<\/tr>\n<tr data-start=\"2063\" data-end=\"2158\">\n<td>P2<\/td>\n<td>2<\/td>\n<td>4<\/td>\n<td>12<\/td>\n<td>12 &#8211; 2 = 10<\/td>\n<td>10 &#8211; 4 = 6<\/td>\n<\/tr>\n<tr data-start=\"2159\" data-end=\"2254\">\n<td>P3<\/td>\n<td>4<\/td>\n<td>1<\/td>\n<td>8<\/td>\n<td>8 &#8211; 4 = 4<\/td>\n<td>4 &#8211; 1 = 3<\/td>\n<\/tr>\n<tr data-start=\"2255\" data-end=\"2350\">\n<td>P4<\/td>\n<td>5<\/td>\n<td>4<\/td>\n<td>16<\/td>\n<td>16 &#8211; 5 = 11<\/td>\n<td>11 &#8211; 4 = 7<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-start=\"2352\" data-end=\"2479\"><strong data-start=\"2354\" data-end=\"2410\">Average Waiting Time (AWT) = (0 + 6 + 3 + 7) \/ 4 = 4<\/strong><br data-start=\"2410\" data-end=\"2413\" \/><strong data-start=\"2415\" data-end=\"2477\">Average Turnaround Time (ATAT) = (7 + 10 + 4 + 11) \/ 4 = 8<\/strong><\/p>\n<h3 data-start=\"2486\" data-end=\"2528\"><strong data-start=\"2490\" data-end=\"2526\">\u00a0Preemptive SJF (SRTF) Example<\/strong><\/h3>\n<p data-start=\"2529\" data-end=\"2681\">In <strong data-start=\"2532\" data-end=\"2572\">Shortest Remaining Time First (SRTF)<\/strong>, if a new process with a <strong data-start=\"2598\" data-end=\"2620\">shorter burst time<\/strong> arrives, the CPU <strong data-start=\"2638\" data-end=\"2678\">switches to that process immediately<\/strong>.<\/p>\n<p data-start=\"2683\" data-end=\"2798\"><strong data-start=\"2686\" data-end=\"2698\">Example:<\/strong> If <strong data-start=\"2702\" data-end=\"2716\">P1 (10 ms)<\/strong> is running and <strong data-start=\"2732\" data-end=\"2745\">P2 (3 ms)<\/strong> arrives, P1 is <strong data-start=\"2761\" data-end=\"2774\">preempted<\/strong>, and P2 executes first.<\/p>\n<h3 data-start=\"2805\" data-end=\"2842\"><strong data-start=\"2809\" data-end=\"2842\">\u00a0Advantages &amp; Disadvantages<\/strong><\/h3>\n<p data-start=\"2843\" data-end=\"2927\"><strong data-start=\"2845\" data-end=\"2854\">Pros:<\/strong><br data-start=\"2854\" data-end=\"2857\" \/>\u00a0Best for minimizing waiting time<br data-start=\"2891\" data-end=\"2894\" \/>\u00a0Good for <strong data-start=\"2905\" data-end=\"2925\">batch processing<\/strong><\/p>\n<p data-start=\"2929\" data-end=\"3085\"><strong data-start=\"2931\" data-end=\"2940\">Cons:<\/strong><br data-start=\"2940\" data-end=\"2943\" \/><strong data-start=\"2945\" data-end=\"2971\">Difficult to implement<\/strong> (since burst time is not known beforehand)<br data-start=\"3014\" data-end=\"3017\" \/><strong data-start=\"3019\" data-end=\"3039\">Starvation issue<\/strong> (Longer processes might never get CPU time)<\/p>\n<h3 data-start=\"3092\" data-end=\"3122\"><strong data-start=\"3096\" data-end=\"3122\">\u00a0Applications of SJF<\/strong><\/h3>\n<p data-start=\"3123\" data-end=\"3233\"><strong data-start=\"3125\" data-end=\"3153\">Batch processing systems<\/strong><br data-start=\"3153\" data-end=\"3156\" \/><strong data-start=\"3158\" data-end=\"3189\">Job scheduling in databases<\/strong><br data-start=\"3189\" data-end=\"3192\" \/><strong data-start=\"3194\" data-end=\"3231\">Load balancing in cloud computing<\/strong><\/p>\n<p data-start=\"3240\" data-end=\"3311\" data-is-last-node=\"\" data-is-only-node=\"\">Would you like a <strong data-start=\"3257\" data-end=\"3279\">Python\/C++ program<\/strong> to implement SJF Scheduling?<\/p>\n<h3 data-start=\"3240\" data-end=\"3311\"><a href=\"https:\/\/www.vbspu.ac.in\/e-content\/Scheduling-Algorithm.pdf\" target=\"_blank\" rel=\"noopener\">Day 02Part 06- Operating System for Gate &#8211; Shortest Job First Scheduling Algorithm<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/aissmspoly.org.in\/wp-content\/uploads\/2020\/01\/CPU-Scheduling-and-Algorithm-.pdf\" target=\"_blank\" rel=\"noopener\">Unit IV \u2013 CPU Scheduling and Algorithm<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\">OPERATING SYSTEM<\/h3>\n<p>Here\u2019s a clear and exam-focused explanation of <strong>Shortest Job First (SJF) Scheduling Algorithm<\/strong> \u2013 perfect for <strong>GATE, B.Tech, or Operating System coursework<\/strong>. This is <strong>Day 02 &#8211; Part 06<\/strong> of an OS series.<\/p>\n<hr \/>\n<h2>\ud83d\udda5\ufe0f <strong>Operating System \u2013 Scheduling Algorithms<\/strong><\/h2>\n<h3>\ud83d\udcd8 <strong>Day 02, Part 06: Shortest Job First (SJF)<\/strong><\/h3>\n<hr \/>\n<h2>\ud83d\udd39 <strong>What is SJF (Shortest Job First)?<\/strong><\/h2>\n<p>SJF is a <strong>CPU scheduling algorithm<\/strong> where the process with the <strong>smallest burst time<\/strong> (execution time) is executed <strong>first<\/strong>.<\/p>\n<p>It is also known as:<\/p>\n<ul>\n<li><strong>Shortest Next Job (SNJ)<\/strong><\/li>\n<li>A type of <strong>non-preemptive scheduling<\/strong><\/li>\n<\/ul>\n<hr \/>\n<h2>\u2699\ufe0f <strong>How SJF Works:<\/strong><\/h2>\n<ul>\n<li>Among all the available processes in the ready queue, the CPU chooses the one with the <strong>shortest burst time<\/strong>.<\/li>\n<li>Once selected, the CPU executes that process <strong>till completion<\/strong> (non-preemptive).<\/li>\n<\/ul>\n<hr \/>\n<h2>\ud83d\udccc <strong>Characteristics:<\/strong><\/h2>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Type<\/td>\n<td>Non-preemptive (basic SJF)<\/td>\n<\/tr>\n<tr>\n<td>Criteria<\/td>\n<td>Shortest burst time<\/td>\n<\/tr>\n<tr>\n<td>Optimality<\/td>\n<td>Minimum average waiting time<\/td>\n<\/tr>\n<tr>\n<td>Starvation<\/td>\n<td>Yes (long jobs may wait forever)<\/td>\n<\/tr>\n<tr>\n<td>Preemptive Version<\/td>\n<td>Yes, called <strong>SRTF<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2>\ud83e\uddea <strong>Example:<\/strong><\/h2>\n<p>Assume 4 processes with the following burst times (all arrive at time 0):<\/p>\n<table>\n<thead>\n<tr>\n<th>Process<\/th>\n<th>Burst Time<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>P1<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>P2<\/td>\n<td>8<\/td>\n<\/tr>\n<tr>\n<td>P3<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>P4<\/td>\n<td>3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\u2705 Step-by-step Execution:<\/h3>\n<ul>\n<li>At time 0, all processes are available.<\/li>\n<li>Choose process with shortest burst time = <strong>P4 (3)<\/strong><\/li>\n<\/ul>\n<h3>\ud83d\udd01 Execution Order:<\/h3>\n<p><strong>P4 \u2192 P1 \u2192 P3 \u2192 P2<\/strong><\/p>\n<hr \/>\n<h2>\ud83d\udcca <strong>Calculations:<\/strong><\/h2>\n<h3>\ud83d\udd39 <strong>Completion Time (CT), Turnaround Time (TAT), Waiting Time (WT):<\/strong><\/h3>\n<table>\n<thead>\n<tr>\n<th>Process<\/th>\n<th>BT<\/th>\n<th>CT<\/th>\n<th>TAT = CT-AT<\/th>\n<th>WT = TAT &#8211; BT<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>P4<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td>P1<\/td>\n<td>6<\/td>\n<td>9<\/td>\n<td>9<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>P3<\/td>\n<td>7<\/td>\n<td>16<\/td>\n<td>16<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<td>P2<\/td>\n<td>8<\/td>\n<td>24<\/td>\n<td>24<\/td>\n<td>16<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\ud83d\udcd0 Averages:<\/h3>\n<ul>\n<li>Average TAT = (3+9+16+24)\/4 = <strong>13<\/strong><\/li>\n<li>Average WT = (0+3+9+16)\/4 = <strong>7<\/strong><\/li>\n<\/ul>\n<p>\u2705 <strong>SJF gives the minimum average waiting time<\/strong> among all non-preemptive algorithms.<\/p>\n<hr \/>\n<h2>\ud83e\udde0 <strong>Key Points for GATE:<\/strong><\/h2>\n<table>\n<thead>\n<tr>\n<th>Concept<\/th>\n<th>Remember<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SJF Optimality<\/td>\n<td>Proven optimal for non-preemptive scheduling (shortest WT)<\/td>\n<\/tr>\n<tr>\n<td>Starvation Possible<\/td>\n<td>Yes, if short jobs keep coming<\/td>\n<\/tr>\n<tr>\n<td>Preemptive Form<\/td>\n<td>SRTF (Shortest Remaining Time First)<\/td>\n<\/tr>\n<tr>\n<td>Used Where<\/td>\n<td>Batch systems, predictable jobs<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2>\ud83d\udcda <strong>MCQ Practice (GATE style):<\/strong><\/h2>\n<p><strong>Q: In SJF scheduling, which of the following is TRUE?<\/strong><br \/>\na) Longest job executes first<br \/>\nb) Starvation is not possible<br \/>\nc) Shortest available job executes first<br \/>\nd) SJF always uses priorities<\/p>\n<p>\u2705 <strong>Answer: c)<\/strong> Shortest available job executes first<\/p>\n<hr \/>\n<p>Would you like:<\/p>\n<ul>\n<li>\ud83d\udd01 <strong>SRTF (Preemptive SJF)<\/strong> explanation next?<\/li>\n<li>\ud83d\udcca <strong>Python program or Gantt chart<\/strong> for simulation?<\/li>\n<li>\ud83d\udcdd <strong>PDF notes + GATE previous questions with solutions<\/strong>?<\/li>\n<\/ul>\n<p>Just let me know!<\/p>\n<h3><a href=\"https:\/\/www.boardofwatersupply.com\/bws\/media\/redhill\/red%20hill%20groundwater%20monitoring%20repts\/red-hill-ocr-groundwater-protection-plan-2008-01.pdf\" target=\"_blank\" rel=\"noopener\">Day 02Part 06- Operating System for Gate &#8211; Shortest Job First Scheduling Algorithm<\/a><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Day 02Part 06- Operating System for Gate &#8211; Shortest Job First Scheduling Algorithm [fvplayer id=&#8221;307&#8243;] \u00a0Day 02 Part 06 &#8211; Operating System for GATE Shortest Job First (SJF) Scheduling Algorithm \u00a0What is SJF Scheduling? Shortest Job First (SJF) is a CPU scheduling algorithm that selects the process with the smallest burst time for execution next. [&hellip;]<\/p>\n","protected":false},"author":66,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78],"tags":[],"class_list":["post-3226","post","type-post","status-publish","format-standard","hentry","category-operating-system"],"_links":{"self":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/3226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/users\/66"}],"replies":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/comments?post=3226"}],"version-history":[{"count":0,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/3226\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media?parent=3226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/categories?post=3226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/tags?post=3226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}